1.先在Application中实例化ImageLoader的实例
imageLoader = new ImageLoader(getRequestQueue(), new VolleyImageCache());
2 构造器中需要传两个参数,第一个参数getRequestQuery()是为了获取一个Volley请求网络的队列。第二个参数是一个ImageCache类型的参数,目的是设置图片缓存。
class VolleyImageCache implements ImageLoader.ImageCache {
@Override
public Bitmap getBitmap(String url) {
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
}
3.在VolleyImageCache类的构造方法中设置缓存参数
class VolleyImageCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public VolleyImageCache() {
int maxCacheSize = 1024 * 1024 * 10;
mCache = new LruCache<String, Bitmap>(maxCacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
4.在UI县城中实例化ImageLoader.ImageListener
ImageLoader.ImageListener listener = ImageLoader.getImageListener(img, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
三个参数代表的含义分别是
img需要显示在那个ImageView控件上
两个R.mipmap.ic_launcher默认显示的图片和没有网络显示的图片
5.调用在Application中实例化好的ImageLoader的get方法下载和现实图片
MyApplication.getImageLoader().get(UserContents.imageUrl,listener);
参数分别是:图片的url和上面定义的listener
6.可以做个简单的封装
完整代码:
public class MineFragment extends Fragment {
private View view;
private ImageView img;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.mine_layout,container, false);
initView(view);
return view;
}
private void initView(View view) {
img = (ImageView) view.findViewById(R.id.mine_img);
VolleyImageUtils.loadImage(UserContents.imageUrl, img);
}
@Override
public void onDestroyView() {
super.onDestroyView();
((ViewGroup) view.getParent()).removeView(view);
}
}
public class MyApplication extends Application {
private static RequestQueue requestQueue;
private static ImageLoader imageLoader;
public static RequestQueue getRequestQueue() {
return requestQueue;
}
public static ImageLoader getImageLoader() {
return imageLoader;
}
@Override
public void onCreate() {
super.onCreate();
requestQueue = Volley.newRequestQueue(getApplicationContext());
imageLoader = new ImageLoader(getRequestQueue(), new VolleyImageCache());
}
class VolleyImageCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public VolleyImageCache() {
int maxCacheSize = 1024 * 1024 * 10;
mCache = new LruCache<String, Bitmap>(maxCacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
}
public class VolleyImageUtils {
public static void loadImage(String url, View view) {
ImageLoader.ImageListener listener = ImageLoader.getImageListener((ImageView)view, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
MyApplication.getImageLoader().get(url, listener);
}