如果你不知道什么是Volley,那么请看:http://blog.csdn.net/t12x3456/article/details/9221611
第一步,定义一个BitmapCache类
public class BitmapCache implements ImageCache {
<span style="white-space:pre"> </span>// 如果想让整个项目共用一个图片缓存,那么这里可以将mCache设置成静态
<span style="white-space:pre"> </span>private LruCache<String, Bitmap> mCache;
<span style="white-space:pre"> </span>public BitmapCache() {
<span style="white-space:pre"> </span>if (mCache == null) {
<span style="white-space:pre"> </span>// 分配10M的缓存空间
<span style="white-space:pre"> </span>int maxSize = 10 * 1024 * 1024;
<span style="white-space:pre"> </span>mCache = new LruCache<String, Bitmap>(maxSize) {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>protected int sizeOf(String key, Bitmap value) {
<span style="white-space:pre"> </span>return value.getRowBytes() * value.getHeight();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>};
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public Bitmap getBitmap(String url) {
<span style="white-space:pre"> </span>return mCache.get(url);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void putBitmap(String url, Bitmap bitmap) {
<span style="white-space:pre"> </span>mCache.put(url, bitmap);
<span style="white-space:pre"> </span>Log.d(getClass().getSimpleName(), "cacheSize/maxSize:" + mCache.size() + "/" + mCache.maxSize());
<span style="white-space:pre"> </span>}
}
第二步,看看Adapter的核心方法getView
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_volley_list, null);
holder = new ViewHolder();
holder.img = (ImageView) convertView.findViewById(R.id.item_img);
holder.name = (TextView) convertView.findViewById(R.id.item_txt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
VolleyItem item = items.get(position);
holder.name.setText(item.getName());
// 利用Volley加载图片
ImageListener listener = ImageLoader.getImageListener(holder.img, 0, R.drawable.mz_img_error);
mImageLoader.get(item.getImgUrl(), listener);
return convertView;
}
大家都知道,图片加载是OOM(OutOfMemory)的常客,那么楼主使用红米1S手机测试2000条带图片的ListView,完美运行,滑动无卡顿现象。
GitHub: https://github.com/zcs417327734/ZengCSVolleyDemo