Closed kvgnt closed 10 years ago
额,是额。不过我是在外部自己处理了displayer的对应关系。 原来的设计理念FinalBitmap倾向于全局处理。想来想去,这种方法应该是对FinalBitmap侵入最小的了。
/**
Created by pwy on 13-10-15. */ public class MEBitmap { //用于记录view和diaplayer的临时对应关系 static WeakHashMap<View, Displayer> displayerWeakHashMap = new WeakHashMap<View, Displayer>(); static FinalBitmap fbp; static SimpleDisplayer simpleDisplayer = new SimpleDisplayer();
public static synchronized FinalBitmap get() { if (fbp == null) { fbp = FinalBitmap.create(MEApplication.get()); //fbp.configMemoryCacheSize(1024 * 1024 * 2); if (new File(AppConfig.IMG_CACHE_PATH).mkdirs()) { fbp.configDiskCachePath(AppConfig.IMG_CACHE_PATH); } fbp.configDisplayer(new Displayer() { @Override public void loadCompletedisplay(View imageView, Bitmap bitmap, BitmapDisplayConfig config) { if (displayerWeakHashMap.get(imageView) != null) { displayerWeakHashMap.get(imageView).loadCompletedisplay(imageView, bitmap, config); } else { simpleDisplayer.loadCompletedisplay(imageView, bitmap, config); } }
@Override
public void loadFailDisplay(View imageView, Bitmap bitmap) {
if (displayerWeakHashMap.get(imageView) != null) {
displayerWeakHashMap.get(imageView).loadFailDisplay(imageView, bitmap);
} else {
simpleDisplayer.loadFailDisplay(imageView, bitmap);
}
}
});
}
return fbp;
} public static void display(View imageView,String uri,Bitmap loadingBitmap){ displayerWeakHashMap.remove(imageView); get().display(imageView, uri,loadingBitmap); } public static void display(View view, String url) { displayerWeakHashMap.remove(view); get().display(view, url); }
public static void display(View view, String url, Displayer displayer) { displayerWeakHashMap.put(view, displayer); get().display(view, url); } public static void display(View view, String url,Bitmap loadingBitmap, Displayer displayer) { displayerWeakHashMap.put(view, displayer); get().display(view, url,loadingBitmap); } }
感觉用HashMap还是不太可靠。 老得手动删除。
同样的还有EventBus也是。最近想把EventBus也改为Weakreference的。 代码规模一上来,这类的处理很容易漏掉。
感觉你的这个方法确实是要好过我的.我想把我这个合并取消掉,找不到取消合并的按钮呢...
在 pull request 界面的最下面,comment按钮的左边有个 close 按钮。
使用方法: FinalBitmap fb = FinalBitmap.create(ctx); FinalBitmap.addLoadBitmapCallBack(imgView.getId(), new Displayer(){ @Override public void loadCompletedisplay(View imageView, Bitmap bitmap, BitmapDisplayConfig config) { // TODO Auto-generated method stub
} @Override public void loadFailDisplay(View imageView, Bitmap bitmap) { // TODO Auto-generated method stub } }); fb.display(imgView,...)