Volley学习笔记二

在上一篇文章中,根据郭林大神的文章进行了学习与总结,这篇文章继续。这个系列主要是网络框架的博文学习笔记,是博主自己学习的时候所记的笔记与总结。之后在学习完之后,会再过一遍源码,以加深印象。

第二篇我们要学习ImageRequest的用法。

ImageRequest的用法其实与之前所学的三种Request用法相似。没错,它们都是继承自Request类。所以请求还是分三步,第一步,创建请求队列。第二步,创建Request对象。第三步,将Request对象加入到请求队列中。

那么有没有不同之处呢?答案是有的。ImageRequest的构造方法有六个参数,第一个是图片的URL地址。第二个是图片请求成功的回调。第三个,第四个分别是用于指定允许图片最大的宽度和高度。如果指定网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话,不管图片多大,都不会进行压缩。第五个参数用于指定图片颜色属性,第六个参数是请求失败的回调,我们可以在回调函数中做处理,如请求失败则设置默认图。

生成了ImageRequest对象后,使用add方法加到队列中,则完成了网络请求。

ImageLoader的用法

Imageloader要比ImageRequest更优秀,它不仅能请求图片,还能帮我们过滤掉重复链接。ImageLoader不继承自Request,它的用法大致分为四步。

第一步,创建一个RequestQueue对象。第二步,创建一个ImageLoader对象。第三步,获取一个ImageListener对象。第四步,调用ImageLoader的get方法加载网络图片。

接下来就来实践一下ImageLoader的用法。第一步还是创建请求队列,与之前的请求方式一样,就不重复写了。

第二步,创建ImageLoader对象。ImageLoader的构造方法接收两个参数,第一个是请求队列对象,第二个是ImageCache对象。

第三步,获取一个ImageListener对象。获取方法为ImageLoader.getImageListener(imageView, R.drawable.default,R.drawable.fail); 

getImageListener方法有三个参数,第一个是指定用于显示图片的ImageView,第二个是指定加载图片过程中显示的的图片,第三个是指定加载失败显示的图片。

第四步,调用ImageLoader的get方法加载图片。使用方法为imageLoader.get(URL,listener); get方法接收2个参数,一个是图片的URL,一个是获取的imageListener对象。

运行了get方法之后已经可以下载网络图片了,但是这些用法还不能体现ImageLoader的精髓。想想之前创建的ImageCache对象,是一个空的实现,完全没起缓存的作用。写一个ImageCache很简单,但是写一个性能好的ImageCache就不容易了。郭神给了一篇关于ImageCache的参考文章,这里先不做描述,以后的学习中再探讨。

为了利用上ImageCache,我们自己新建一个BitmapCache,实现ImageCache接口。之后将ImageLoader的第二个参数设置为BitmapCache。

这样就算把ImageLoader的优势利用起来了。

NetworkImageView用法

除了以上两种方法外,Volley还提供了第三种方式来加载网络图片。即使用NetworkImageView。不同于以上两种方法,NetworkImageVierw是一个自定义控件,继承自ImageView,加入了加载网络图片的功能。NetworkImageView的用法分为以下五步。

1 创建一个RequestQueue对象

2 创建一个ImageLoader对象

3 在布局中添加一个NetworkImageView控件

4 在代码中获取该控件

5 设置要加载图片的地址

在布局中添加完,并在Activity中获取后,我们可以调用NetworkImageView的setDefaultImageResId方法,setErrorImageResId方法和setImageUrl方法来分别设置加载中显示的图片,加载失败显示的图片以及目标图片的URL。

其中,setImageUrl方法接收两个参数,一个是URL地址,一个是前面创建的ImageLoader对象。值得一提的是,NetworkImageView在使用时不需要我们来设置图片的大小,加载图片的时候它会自动获取自身的宽高,然后对比网络图片,自动进行压缩。


以上三种方法,就是volley提供给我们的加载网络图片的方法。


让我们来回顾一下volley框架下网络配图片的加载方法。一共三种。

第一种,ImageRequest。看名字就知道,继承自Request,用法和之前的Request用法一样。区别在于ImageRequest的构造方法接收6个参数。一个是URL的地址,然后是图片的宽和高,第四个参数是压缩比例,第五个参数是图片的颜色控制,最后第六个参数是请求失败的回调。我们可以在失败请求的时候设置图片展示默认图片。

第二种,ImageLoader。有点是可以缓存。使用方法分四步。第一步,创建一个请求队列。第二步,创建一个ImageLoader。第三步,获取一个ImageLoaderListener。第四步,通过get方法加载网络图片。ImageLoader构造接收两个参数,一个是请求队列对象,一个是缓存对象Cache。获取的ImageLoaderListener接收三个参数,一个是图片展示的ImageView,一个是加载过程中展示的图片,一个是加载失败展示的图片。之后调用imageLoader的get方法进行图片加载。get方法接收两个参数,一个是URL,一个是listener。

第三种,NetworkImageView。是一种自定义控件,继承自ImageView。使用方法更为简单,创建请求队列,创建ImageLoader。在布局中添加,在Actrivity中获取。之后通过set方法设置加载过程中及失败显示的图片。然后通过setImageUrl方法加载图片。setImageUrl方法接收两个参数,一个是URL地址,一个是之前创建的imageLoader。

稍作休息,之后开始下一章的学习。


你可能感兴趣的:(Volley学习笔记二)