4. 加载图片
在实际应用中,经常需要从网络上下载并显示图片。Volley也提供了从网络下载图片的几种方法,这里主要介绍两种方法:ImageRequest和ImageLoader。
(1) ImageRequest
ImageRequest和StringRequest、JsonObjectRequest类似,都继承自Request,使用方法也差不多。
private void imageRequest(){
ImageRequest imageRequest = new ImageRequest(
"http://tech.cnr.cn/techit/201411/W020141113510671880058.jpg",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imgView.setImageBitmap(response);
}
}, 0, 0, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
imgView.setImageResource(R.drawable.ic_launcher);
}
});
mQueue.add(imageRequest);
}
首先创建一个ImageRequest,构造函数的参数包括图片的URL,下载图片成功的回调函数(这里把下载的图片通过一个ImageView控件显示出来),图片显示的长和宽(这里都设置为0,则按照图片原来的大小显示),图片显示的质量,下载图片失败的回调函数(这里显示一张默认图片)。运行结果如下所示:
(2) ImageLoader
有时从网上下载图片需要很长的时间,在下载的过程中显示一张图片会比较好,ImageLoader就能够实现这个功能。ImageLoader不是继承自Request的,和前面几个Request的使用略有不同,需要先定义ImageLoader和ImageListener,然后调用ImageLoader的get()方法来获取图片。
定义ImageLoader:
ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
@Override
public Bitmap getBitmap(String url) {
return null;
}
});
其中mQueue是请求队列。
定义ImageListener:
ImageListener listener = ImageLoader.getImageListener(imgView,
R.drawable.ic_launcher, R.drawable.ic_launcher);
其中imgView是显示图片的控件,后面两个参数分别是下载图片过程中显示的图片和下载失败显示的图片,这里为了简单,设置的是同一张图片。
最后,使用ImageLoader的get()方法来下载图片。
imageLoader.get("http://tech.cnr.cn/techit/201411/W020141113510671880058.jpg",
listener, 400, 200);
参数包括图片的URL、ImageListener,图片显示的长和宽。运行结果如下: