Volley框架中加载图片的3种方式

Volley框架中加载图片的3种方式,ImageRequestNetworkImageViewImageLoader。最常用的是ImageLoaderImageRequest 。记得导入Volley,这里不再介绍。

  1. ImageRequest的使用非常简单和StringRequest相似,也是继承于Request
  2. 使用NetworkImageView控件加载网络图片,首先要在布局文件中加入
    NetworkImageView控件的引用。然后在代码中对其进行设置。
    布局文件:
<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

布局:

id="@+id/showImg"
        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() {
                    @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 myCache;

    public MyImageCache(){
        myCache = new LruCache((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加载图片的三种方式

你可能感兴趣的:(技术篇)