Volley框架中加载图片的3种方式,ImageRequest
,NetworkImageView
,ImageLoader
。最常用的是ImageLoader
和ImageRequest
。记得导入Volley,这里不再介绍。
ImageRequest
的使用非常简单和StringRequest
相似,也是继承于Request
。<com.android.volley.toolbox.NetworkImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/imgView"/>
设置代码:
setDefaultImageResId(),设置默认图片。
setErrorImageResId(),设置错误图片。
setImageUrl(url,imageLoader),设置图片加载路径及ImageLoader,ImageLoader的用法下面会讲。
3.使用ImageLoader加载网络图片,ImageLoader中封装了请求队列以及图片缓存接口,使加载图片更为简单,更为灵活。
接下来挨个展示小实例:
ImageRequest
布局:
<ImageView
android:id="@+id/showImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/getImg"
android:text="ImageRequest下载显示图片"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
按钮绑定的方法代码:
RequestQueue requestQueue = Volley.newRequestQueue(this);
public void imageRequest(String url){
//实例ImageRequest,并设置参数,分别为地址,响应成功监听,最大宽、高,图片质量,网络异常监听
ImageRequest imageRequest = new ImageRequest(url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
imageView1.setImageBitmap(bitmap);
}
}, 500, 500, Bitmap.Config.ARGB_8888,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getBaseContext(),"网络异常",Toast.LENGTH_SHORT).show();
}
});
//添加请求
requestQueue.add(imageRequest);
}
ImageLoader:
同样的布局文件。
绑定的方法代码:
public void imgageLoader(String url,ImageView imageView){
//实例ImageLoader,并设置参数,1:请求队列,2:图片缓存,图片缓存类是自定义的类
ImageLoader imageLoader = new ImageLoader(requestQueue,new MyImageCache());
//监听,参数1:imageView:图片要显示的地方:2:默认显示的图片,3:网络异常时显示的图片
ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(imageView,
R.mipmap.ic_launcher,R.mipmap.ic_launcher);
//加载loader,参数1:地址,2:监听,3,4:宽高
imageLoader.get(url,imageListener,500,500);
}
自定义图片缓存类:
public class MyImageCache implements ImageLoader.ImageCache {
// LruCache图片缓存处理类
// 当缓存的图片达到了预先设定值时,近期使用次数最少的图片就会被回收
// 设置手机存储的1/8大小来缓存图片
// 这个类一般都是直接拷贝使用,可当工具类,一般只修改其要求的大小(即修改1024/8)
private LruCache<String,Bitmap> myCache;
public MyImageCache(){
myCache = new LruCache<String,Bitmap>((int)(Runtime.getRuntime().maxMemory()/1024/8)){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes()*value.getHeight();
}
};
}
//从缓存中返回位图
@Override
public Bitmap getBitmap(String s) {
return myCache.get(s);
}
//将图片放入缓存
@Override
public void putBitmap(String s, Bitmap bitmap) {
myCache.put(s,bitmap);
}
}
NetWorkImageView:
该控件用得少,很多人建议不要用,不过还是贴出简单的使用方法。
布局:
<com.android.volley.toolbox.NetworkImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:id="@+id/imgView"/>
绑定的方法代码:
//netWorkImageView加载图片封装成方法
public void netWorkImgViewTest(){
String url ="图片地址";
imageLoader = new ImageLoader(requestQueue,new BitCache());
imgView.setDefaultImageResId(R.drawable.ic_launcher);
imgView.setErrorImageResId(R.drawable.ic_launcher);
imgView.setImageUrl(url,imageLoader);
}
以上就是Volley
加载图片的三种方式