使用Volley框架中的ImageLoader来异步的加载图片
Volley框架在请求网络图片方面也做了很多工作,提供了好几种方法.本文介绍使用ImageLoader来进行网络图片的加载.
ImageLoader的内部使用ImageRequest来实现,它的构造器可以传入一个ImageCache缓存形参,实现了图片缓存的功能,同时还可以过滤重复链接,避免重复发送请求。
下面是ImageLoader加载图片的实现方法:
用一个类来编写图片加载和缓存的相关操作:例如:ImageWorkerManager
初始化全局图片缓存
private void init(Context context) { mQueue = Volley.newRequestQueue(context); ImageCache.ImageCacheParams cacheParams = new ImageCache.ImageCacheParams(context, FileManager.CACHE_IMAGE_PATH_NEW); cacheParams.setMemCacheSizePercent(context, 0.2f); imageCache = new ImageCache(cacheParams); mImageLoader = new ImageLoader(mQueue, imageCache); }
加载图片
public void loadCommonImage(String coverUrl, ImageView imageView, int loadingDrawableId, int defaultDrawableId, int width, int height) {//可以通过width,height来设置图片的最大宽度和高度,超过后volley会自动压缩。 if (coverUrl == null) { coverUrl = ""; } com.android.volley.plus.ImageCache cache = getImageCache(); if (cache.getBitmapFromMemCache(coverUrl) != null) { imageView.setImageBitmap(cache.getBitmapFromMemCache(coverUrl)); } else { ImageLoader.ImageContainer container = getImageLoader().get(coverUrl, TransitionImageListener.obtain(imageView, loadingDrawableId, defaultDrawableId), width, height); imageView.setTag(container); } }
在Activity中的应用:
ImageWorkerManager.getInstance(getActivity()).loadCommonImage(Utils.getPhotoUrl(mUser.getAvatar()), mAvatar,
R.drawable.img_vip, R.drawable.img_vip, mAvatar.getWidth(), mAvatar.getHeight());
注意:volley只适合小数据,小图片。用volley上传图像什么的要注意。如果图片过大最好要压缩。