之前我们已经通过Volley从网络资源中下载东西了,那么Volley也可以从网络中获取网络图片等,在这里用两种方法可以实现下载图片。
第一种是用imageRequest图片请求队列来实现mageRequest imgRequest=new ImageRequest(url,listener,errorlistener);
url表示你访问的图片地址,listener表示访问成功的监听,errorlistener表示访问不成功的监听。这里的图片格式是Bitmap类型的,所以当获取到图片的网络地址时,用setImageBitmap()方法来显示在页面上。
ImageRequest imgRequest=new ImageRequest(
"http://photocdn.sohu.com/20140910/Img404194951.jpg",
new Listener<Bitmap>() {
@Override
public void onResponse(Bitmap arg0) {
img.setImageBitmap(arg0);
}
},
0, 0,
Config.ARGB_8888,
new ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
Toast.makeText(VolleyActivity.this,"网络已断开",Toast.LENGTH_LONG).show();
}
});
mRequestQuene.add(imgRequest);
第二种是用图片加载器imageLoader,首先由自定义一个图片缓冲器,来设置图片缓存的大小和格式。
public class BitMapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;
public BitMapCache() {
super();
int maxSize=1024*1024*10;//创建了一个10M的缓存
mCache=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 mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitMap) {
mCache.put(url,bitMap);
}
}
然后在主Activity里面定义全局变量private ImageLoader imageLoader;
并对它进行初始化imageLoader=new ImageLoader(mRequestQueue, new BitMapCache());
然后当有请求时,对它进行处理。ImageListener listener=ImageLoader.getImageListener()是给图片设了一个监听器,第一个变量表示图片加载之后显示在页面的位置,第二个变量时在加载时显示的图片,第三个变量表示图片加载失败是显示的图片。
然后通过get方法把网络资源和监听器绑定在一起。
ImageListener listener=ImageLoader.getImageListener(img, R.drawable.ic_launcher, R.drawable.help_detail1);
imageLoader.get("http://photocdn.sohu.com/20140910/Img404194951.jpg", listener);