我正在尝试在我的程序中实现 Lru Cache 以使我的列表视图滚动得更快。我不知道在 addBitmapToCache(String key, Bitmap bitmap (由 XXXXXX 表示) 的 Bitmap 值中放置什么。有人有建议吗?谢谢。
public class ImageCache extends LruCache<String, Bitmap> {
public ImageCache(int maxSize) {
super(maxSize);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount() / 1024;
}
public void addBitmapToCache(String key, Bitmap bitmap) {
if (getBitmapFromCache(key) == null) {
put(key, bitmap);
}
}
public Bitmap getBitmapFromCache(String key) {
return get(key);
}
}
这是我实现它的地方。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
View rowView = convertView;
if(rowView==null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.listview_layout, parent, false);
holder = new ViewHolder();
holder.img = (ImageView) rowView.findViewById(R.id.flag);
rowView.setTag(holder);
}
else
{
holder = (ViewHolder) rowView.getTag();
}
//holder.img.setImageResource(imageIds.get(position));
loadBitmap(imageIds.get(position),holder.img);
return rowView;
}
public void loadBitmap(int resId, ImageView imageView) {
final String imageKey = String.valueOf(resId);
Bitmap storeBitmap;
final Bitmap bitmap = mCache.getBitmapFromCache(imageKey);
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageResource(resId);
storeBitmap = BitmapFactory.decodeResource(imageView.getResources(), resId);
mCache.addBitmapToCache(String.valueOf(resId), storeBitmap);
}
}