0

我正在尝试在我的程序中实现 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);
    }
}
4

1 回答 1

0

调用BitmapFactory.decodeResource(imageView.getResources(), resId)以从资源中加载位图并将其放入图像缓存中。下次您需要它时,它将出现在缓存中,这将加快列表项视图的设置。

于 2014-08-24T23:30:20.380 回答