通过Volley实现ListView加载大量图片(Demo是2000张)

如果你不知道什么是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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值