我有一个显示产品的ListView。 每个产品都有产品详细信息 和一个ImageView,但问题是我 为图像做延迟加载 产品。图像很高 解析度。滚动时会变成 蛤蜊(不光滑)。因为下载了 图像需要时间。 Facebook有同样的方式 他们的图像,但滚动很多 更顺畅的任何解决方案请帮助。
答案 0 :(得分:3)
你好Ali4Android你看到这个链接你可能有任何想法来解决问题
答案 1 :(得分:1)
public class BitmapCacheManager {
private static LruCache<Object, Bitmap> cache = null;
private final Context context;
private static final int KB = 1024;
private final Drawable placeHolder;
public BitmapCacheManager(Context context) {
this.context = context;
placeHolder = context.getResources().getDrawable(R.drawable.unknown);
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / KB);
int cacheSize = maxMemory / 7;
cache = new LruCache<Object, Bitmap>(cacheSize) {
@Override
protected int sizeOf(Object albumId, Bitmap bitmap) {
return (bitmap.getRowBytes() * bitmap.getHeight() / KB);
}
protected void entryRemoved(boolean evicted, Object key, Bitmap oldValue, Bitmap newValue) {
oldValue.recycle();
}
};
}
public void addBitmapToMemoryCache(Object key, Bitmap bitmap) {
if (bitmap != null && key != null && cache.get(key) == null)
cache.put(key, bitmap);
}
public Bitmap getBitmapFromMemCache(Object key) {
return cache.get(key);
}
public void loadBitmap(final Object key, final ImageView imageView) {
final Bitmap bitmap = getBitmapFromMemCache(key);
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageDrawable(placeHolder);
BitmapWorker task = new BitmapWorker(imageView);
task.execute(key);
}
}
private class BitmapWorker extends AsyncTask<Object, Void, Bitmap> {
private final ImageView imageView;
private Object key;
public BitmapWorker(final ImageView imageView) {
this.imageView = imageView;
}
@Implement
protected Bitmap doInBackground(Object... params) {
key = params[0];
final Bitmap b = SomeClass.GetSomeBitmap(context, key);
addBitmapToMemoryCache(key, b);
return b;
}
@Override
protected void onPostExecute(final Bitmap bitmap) {
if (bitmap == null) {
imageView.setImageBitmap(SomeClass.DefaultBitmap);
return;
}
if (imageView.getTag().toString().equalsIgnoreCase(key.toString()) && !bitmap.isRecycled())
imageView.setImageBitmap(bitmap);
}
}
}
并致电:
bitmapCacheManager.loadBitmap(somekey, someImageView);
答案 2 :(得分:1)