一、ImageRequest
不知道将ImageRequest放在这里进行介绍是否合适,因为毕竟它属于一个请求队列,与StringRequest、JsonRequest、JsonArrayRequest请求差不多,前面的三种都是用于请求文本类型的,而ImageRequest是请求的图片,但是同样的他们太都离不开RequestQueue,都必须添加到请求队列中。
1、1使用步骤
(1)在布局文件中添加ImageView控件,用于网络图片的显示
(2)创建请求队列RequestQueue
(3)创建ImageRequest
1.2示例代码段
RequestQueue queue2=((MyApplication)getApplication()).getQueue();String url2="http://pic3.zhongsou.com/image/3800f20b9d5a32a494f.jpg";ImageRequest imgrequest=new ImageRequest(url2, new Listener() {@Overridepublic void onResponse(Bitmap arg0) {imgview.setImageBitmap(arg0);}}, 0, 0, Config.RGB_565, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {}});queue2.add(imgrequest);
二、NewWorkImageView
NewWorkImageView的使用调用了Volley的ImageLoader、ImageCache、Lrucache,看起来比较麻烦,当然我们也可以直接使用google原代码中给出的单例(后面代码中的MySingleton,这里进行单例的主要目的是不要有过多的请求队列和创建多个ImageLoader),也可以自己写一个封装类来获得,
2、1使用步骤
1、首先在布局中添加networkImageView(注意写全包名)
<com.android.volley.toolbox.NetworkImageViewandroid:id&#61;"&#64;&#43;id/networkImageview"android:layout_width&#61;"400dp"android:layout_height&#61;"400dp"android:layout_gravity&#61;"center_horizontal"/>
2、创建ImageLoader&#xff0c;对它进行单例&#xff08;其中涉及到ImageCache、Lrucache&#xff09;
3、通过networkImageView对单例的内容进行获得ImageLoader加载图片
2、2示例
2.2.1google给出的单例
public class MySingleton {private static MySingleton mInstance;private RequestQueue mRequestQueue;private ImageLoader mImageLoader;private static Context mCtx;private MySingleton(Context context) {mCtx &#61; context;mRequestQueue &#61; getRequestQueue();mImageLoader &#61; new ImageLoader(mRequestQueue,new ImageLoader.ImageCache() {private final LruCachecache &#61; new LruCache(20);&#64;Overridepublic Bitmap getBitmap(String url) {return cache.get(url);}&#64;Overridepublic void putBitmap(String url, Bitmap bitmap) {cache.put(url, bitmap);}});}public static synchronized MySingleton getInstance(Context context) {if (mInstance &#61;&#61; null) {mInstance &#61; new MySingleton(context);}return mInstance;}public RequestQueue getRequestQueue() {if (mRequestQueue &#61;&#61; null) {mRequestQueue &#61; Volley.newRequestQueue(mCtx.getApplicationContext());}return mRequestQueue;}public void addToRequestQueue(Request req) {getRequestQueue().add(req);}public ImageLoader getImageLoader() {return mImageLoader;}}
2.2.2自己写的获得RequestQueue和ImageLoader
使用自己写的在调用的时候需要注意强制造型
public class MyApplication extends Application {private RequestQueue queue;private ImageLoader imageLoader;private ImageCache imageCache;&#64;Overridepublic void onCreate() {super.onCreate();if (queue &#61;&#61; null) {queue &#61; Volley.newRequestQueue(this);}imageCache&#61;new ImageCache() {final LruCache cache&#61;new LruCache(20);&#64;Overridepublic void putBitmap(String arg0, Bitmap arg1) {cache.put(arg0, arg1);}&#64;Overridepublic Bitmap getBitmap(String arg0) {return cache.get(arg0);}}; imageLoader&#61;new ImageLoader(queue, imageCache); }public ImageLoader getImageLoader() {return imageLoader;}public RequestQueue getQueue() {return queue;}
}
2.2.3NewWorkImageView的使用
networkImageView.setImageUrl(url, ((MyApplication)getApplication()).getImageLoader());
三、ImageRequest与NewWorkImageView
这里将他们两个的关系提出来&#xff1a;
值得一提的是ImageLoader与NewWorkImageView的内部都是使用了ImageRequest进行操作的&#xff0c;也就是说imageRequest是本质&#xff0c;这也是我将ImageRequest与NewWorkImageView放在一起讨论的原因。