LruCash使用showImageByThread有Bug
1.剛載入時(shí),可見項(xiàng)目除了最後一個有載入圖片(有時(shí)還錯位),其它只顯示ic_launcher
2.要滾動畫面好幾次才會全部載入對應(yīng)的圖片
程式碼如下?
ImageLoader.java
ImageView?imageView; String?url; LruCache<String,?Bitmap>?bitmapLruCache; public?ImageLoader()?{ ????int?maxMemory?=?(int)?Runtime.getRuntime().maxMemory(); ????int?cashSize?=?maxMemory?/?4; ????bitmapLruCache?=?new?LruCache<String,?Bitmap>(cashSize)?{ ????????@Override ????????protected?int?sizeOf(String?key,?Bitmap?value)?{ ????????????return?value.getByteCount(); ????????} ????}; } private?Handler?handler?=?new?Handler()?{ ????@Override ????public?void?handleMessage(Message?msg)?{ ????????if?(imageView.getTag().equals(url))?{ ????????????imageView.setImageBitmap((Bitmap)?msg.obj); ????????} ????} }; public?void?showImageByThread(ImageView?imageView,?final?String?url)?{ ????this.imageView?=?imageView; ????this.url?=?url; ????Bitmap?bitmap?=?getBitmapFromCash(url); ????//緩衝沒有bitmap,從網(wǎng)路下載 ????if?(bitmap?==?null)?{ ????????new?Thread()?{ ????????????@Override ????????????public?void?run()?{ ????????????????Bitmap?bitmap?=?getBitmapFromURL(url); ????????????????//將下載的bitmap存到緩衝 ????????????????addBitmapToCash(url,?bitmap); ????????????????Message?msg?=?Message.obtain(); ????????????????msg.obj?=?bitmap; ????????????????handler.sendMessage(msg); ????????????} ????????}.start(); ????}?else?{ ????????imageView.setImageBitmap(bitmap); ????} } public?Bitmap?getBitmapFromURL(String?url)?{ ????Bitmap?bitmap?=?null; ????try?{ ????????URLConnection?connection?=?new?URL(url).openConnection(); ????????InputStream?is?=?connection.getInputStream(); ????????bitmap?=?BitmapFactory.decodeStream(is); ????????is.close(); ????}?catch?(IOException?e)?{ ????????e.printStackTrace(); ????} ????return?bitmap; } public?void?addBitmapToCash(String?url,?Bitmap?bitmap)?{ ????if?(bitmap?!=?null)?{ ????????bitmapLruCache.put(url,?bitmap); ????} } public?Bitmap?getBitmapFromCash(String?url)?{ ????return?bitmapLruCache.get(url); }
2015-06-10
還有個可能,看你代碼你加載圖片的時(shí)候是不是調(diào)用的showImageByThread(ImageView?imageView,?final?String?url)
這個方法?
你這個loader中只有1個ImageView的引用,多次調(diào)用后,這個引用只指向最后一個ImageView,這也許就是為什么只有最后一個圖片顯示的原因吧。
顯示網(wǎng)絡(luò)圖片有好多庫可以用,universalImageLoader,google的volley。。。。。
2015-06-12
把new handler的操作放在你的showImageByThread()里就可以了
2015-06-10
回復(fù) iceliuorange:可以了,把圖片下載獨(dú)立成內(nèi)部類,呼叫時(shí)把imageview和url傳進(jìn)去
2015-06-10
public?void?handleMessage(Message?msg)?{
????????if?(imageView.getTag().equals(url))?{
????????????imageView.setImageBitmap((Bitmap)?msg.obj);
????????}
????}
這里打個斷點(diǎn),看是什么問題