声明:看郭霖大神博客后总结的,原文这里:http://blog.csdn.net/guolin_blog/article/details/17482165
使用Volley加载网络图片
3种方式
- ImageRequest
- ImageLoader
- NetWorkImageView
区别:
1 ImageRequest 用法和get/post基本一样,只是把StringRequest换成了ImageRequest
2 Imageloader是和 ImageCache + ImageListener一起使用的
3 NetWorkImageView 是和 Imageloader + ImageCache一起使用的
第一种:ImageRequest
/** * 用ImageRequest加载图片(用法和get/post基本一样,只是把StringRequest换成了ImageRequest) * 相关的类:RequestQueue + ImageRequest + Response.Listener * 1 创建一个RequestQueue对象 * 2 创建一个ImageRequest对象 * 3 将request添加到RequestQueue实例中 */
代码:
private void getImage1() {
String url = "http://pickaka.ka12345.com/picss/2014/allimg/140612/20230/1-140612161358.jpg";
ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
Toast.makeText(context, "onResponse: " + response, Toast.LENGTH_LONG).show();
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(context, "onErrorResponse: " + error, Toast.LENGTH_LONG).show();
}
});
request.setTag("ImageRequest01");
AppApplication.getQueue().add(request);
}
第二种:ImageLoader(ImageCache)
根据是否使用LruCache 又分使用缓存和不使用缓存2种情况
未使用缓存
/** * ImageLoader(未使用:ImageCache) * 相关的类:RequestQueue + ImageLoader + ImageCache + ImageListener * 1 创建一个RequestQueue对象 * 2 创建一个Imageloader对象 * 3 创建一个ImageCache对象(内部不做处理) * 4 获取一个ImageListener对象 * 5 调用ImageLoader的get()方法加载图片 */
代码:
private void getImage2() {
String url = "http://img1.4443.com/allimg/160630/4-160630101055.jpg";
//ImageCache不能为null
ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(), new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String url) {
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
});
//ImageListener不是new出来的。
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(url,listener);
}
使用缓存
/** * ImageLoader:(使用:ImageCache) * 用到的类和接口:RequestQueue + ImageCache + Imageloader + ImageListener * 1 创建一个RequestQueue对象 * 2 创建一个ImageCache对象 * 3 创建一个Imageloader对象 * 4 获取一个ImageListener对象 * 5 调用ImageLoader的get()方法加载图片 */
代码:
package com.baidu.volleydemo02;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import com.android.volley.toolbox.ImageLoader;
public class BitmapCache implements ImageLoader.ImageCache {
private final LruCache<String, Bitmap> lruCache;
public BitmapCache() {
int maxSize = 10*1024*1024;//10M
lruCache = new LruCache<String ,Bitmap>(maxSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return lruCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
lruCache.put(url,bitmap);
}
}
private void getImage3() {
String url = "http://img1.4443.com/allimg/160630/4-160630101055.jpg";
ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(), new BitmapCache());
//ImageListener不是new出来的。
ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.ic_launcher, R.mipmap.ic_launcher);
imageLoader.get(url,listener);
}
第一种:NetWorkImageView
/** * ImageLoader:(使用:ImageCache) * 用到的类和接口:RequestQueue + ImageCache + Imageloader + ImageListener * 1 创建一个RequestQueue对象 * 2 创建一个ImageCache对象 * 3 创建一个Imageloader对象 * 4 获取一个ImageListener对象 * 5 调用ImageLoader的get()方法加载图片 */
代码:
private void getImage4() {
String url = "http://imgsrc.baidu.com/forum/pic/item/2f738bd4b31c87015246a74c277f9e2f0608ffac.jpg";
ImageLoader imageLoader = new ImageLoader(AppApplication.getQueue(),new BitmapCache());
NetworkImageView netWorkImageView = (NetworkImageView) findViewById(R.id.netWorkImageView);
netWorkImageView.setDefaultImageResId(R.mipmap.ic_launcher);
netWorkImageView.setErrorImageResId(R.mipmap.ic_launcher);
netWorkImageView.setImageUrl(url,imageLoader);
}
总结
Volley的使用(一):get+post
Volley的使用(二):加载网络图片
Volley的使用(三):Volley与Activity的联动 + Volley的二次封装