上一章详细介绍了volley网络请求的流程,这一章将会介绍一下volley图片加载部分源码分析。
Volley还可以进行图片的加载和缓存,可以利用ImageRequest对象简单、方便地进行网络图片的获取。ImageLoader用于获取或缓存图片。NetworkImageView是Volley提供的一个自定义View,可直接设置网络图片。
1、使用ImageRequest进行网络图片获取
使用方法如下:
|
|
然后再将ImageRequest加入到RequestQueue队列中,进行网络请求,传入一些参数:
String : 要获取的图片地址
Response.Listener
int: maxWidth,获取图片的最大宽度,会自动进行压缩或拉伸,设置为0,即获取原图
int :maxHeight,同上
ScaleType :显示的类型,居中,平铺等
Config:图片类型,如:Bitmap.Config.RGB_565
Response.ErrorListener: 获取图片失败的回调
2、使用ImageLoader缓存网络图片
使用imageloader需要以下三步骤,我们从使用方法来看一下源码实现。
2.1 实例化ImageLoader
|
|
requestQueue是前面讲过的请求队列,BitmapCache是一个接口,需要我们自定义imageCache对象。我们可以使用LruCache作为图片缓存对象,如下:
|
|
2.2 设置监听器
|
|
我们看一下ImageLoader.java中的ImageListener函数。
|
|
就是返回一个ImageListener,里面定义了ImageListener接口。
2.3 获取图片
|
|
我们看一下源码imageloader中的get函数
|
|
我们将这些源码分解开来看。
2.3.1
|
|
这段代码,我们先看一下缓存中有没有我们自定义的getBitmap图片,就是我们上面自定义的BitmapCache,上面我使用的是LruCache。如果缓存中有我们要网络加载的图片的话,即cachedBitmap != null,我们就可以回调,显示出来啦。
2.3.2
|
|
判断一下请求是否在请求队列中,如果在就直接return。
2.3.3
|
|
如果不在队列和缓存中,就要就要request加入到网络请求中,关键函数就是makeImageRequest,我们看一下源码。
|
|
这就是网络请求,返回数据处理,看一下onGetImageSuccess函数。
|
|
我们在看一下batchResponse函数。
|
|
请求队列循环,当container.mListener != null并且bir.getError() == null,就可以回调container.mListener.onResponse(container, false)函数,然后这个线程每隔100ms执行一次。
volley图片加载部分到这里就结束了,但我还是没有找到图片网络请求具体部分在哪里,这是我对volley网络图片加载部分的理解,有些地方的理解有问题,如果有不对的地方,希望各位大神指点。