Volley的基本使用(2)——加载图片
2015-12-15 15:51
471 查看
使用Volley加载网络上的图片有3中实现方式:
1.直接使用ImageRequest来加载图片,这个虽然加载图片也是比较快速的,但是没有缓存功能,如果需要重复再网络上看同一张图片的话是很不划算的,因为每一次加载都是很浪费流量的;
2.使用ImageLoader+ImageView来实现加载图片,加入了缓存功能,不过需要自己实现缓存类ImageCache的实现类;
3.使用ImageLoader+NetworkImageView,加入了缓存功能,也需要自己实现缓存类ImageCache的实现类。
下面来介绍一下三种方法的使用:
1.类似于Volley的StringRequest,JSonObjectRequest等网络请求,我们需要创建一个请求队列,这里我新建了一个类MyApplication集成Application,初始化队列,代码如下:
2.接下来就可以使用三种方法加载图片了:
第一种方法:
这里参数的解释我看了一个大神的博客写的非常的详细,所以就直接贴出了这个博客的内容:
可以看到,ImageRequest的构造函数接收六个参数,第一个参数就是图片的URL地址,这个没什么需要解释的。第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。
博客的地址是:http://blog.csdn.net/ysh06201418/article/details/46443235
第二种方法:
这里的BitmapCache类就是实现了图片的缓存功能:
第三种方法:
运行测试上面3中方法后,我发现第三种方法加载的速度没有第一种和第二种快,所以建议的是使用第二种方法实现图片的加载,也就是ImageLoader+ImageView的方法。
1.直接使用ImageRequest来加载图片,这个虽然加载图片也是比较快速的,但是没有缓存功能,如果需要重复再网络上看同一张图片的话是很不划算的,因为每一次加载都是很浪费流量的;
2.使用ImageLoader+ImageView来实现加载图片,加入了缓存功能,不过需要自己实现缓存类ImageCache的实现类;
3.使用ImageLoader+NetworkImageView,加入了缓存功能,也需要自己实现缓存类ImageCache的实现类。
下面来介绍一下三种方法的使用:
1.类似于Volley的StringRequest,JSonObjectRequest等网络请求,我们需要创建一个请求队列,这里我新建了一个类MyApplication集成Application,初始化队列,代码如下:
import com.android.volley.RequestQueue; import com.android.volley.toolbox.Volley; import android.app.Application; public class MyApplication extends Application { public static RequestQueue queues; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); queues = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueues() { return queues; } }同时,在AndroidManifest.xml中加入:
<application android:name="com.raid.volleydemo.MyApplication"/>
2.接下来就可以使用三种方法加载图片了:
第一种方法:
/** * 使用ImageRequest加载网络上的图片 * @param url 加载图片的地址 */ private void useImageView(String url) { ImageRequest request = new ImageRequest(url, new Listener<Bitmap>() { @Override public void onResponse(Bitmap arg0) { // TODO Auto-generated method stub iv.setImageBitmap(arg0); } }, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { // TODO Auto-generated method stub iv.setImageResource(R.drawable.ic_launcher); } }); //加入请求队列 MyApplication.getHttpQueues().add(request); }
这里参数的解释我看了一个大神的博客写的非常的详细,所以就直接贴出了这个博客的内容:
可以看到,ImageRequest的构造函数接收六个参数,第一个参数就是图片的URL地址,这个没什么需要解释的。第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。第三第四个参数分别用于指定允许图片最大的宽度和高度,如果指定的网络图片的宽度或高度大于这里的最大值,则会对图片进行压缩,指定成0的话就表示不管图片有多大,都不会进行压缩。第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据2个字节大小。第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。
博客的地址是:http://blog.csdn.net/ysh06201418/article/details/46443235
第二种方法:
/** * 使用ImageLoader+ImageView实现 * @param url url 加载图片的地址 */ private void useImageLoader(String url) { // 创建ImageLoader对象 ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache()); /** * iv是ImageView * getImageListener的第一个参数是需要显示在哪个ImageView上 * 第二个参数是默认显示的图片 * 第三个参数是加载失败的时候显示的图片 */ ImageListener listener = ImageLoader.getImageListener(iv, R.drawable.ic_launcher, R.drawable.ic_launcher); //把加载类和加载地址和加载监听器联系起来,加载图片 loader.get(url, listener); }
这里的BitmapCache类就是实现了图片的缓存功能:
import android.graphics.Bitmap; import android.support.v4.util.LruCache; import com.android.volley.toolbox.ImageLoader.ImageCache; public class BitmapCache implements ImageCache { //图片缓存类 public LruCache<String, Bitmap> cache; //自定义缓存的最大空间是10M public int max = 10*1024*1024; public BitmapCache() { //初始化缓存类对象 cache = new LruCache<String, Bitmap>(max){ @Override protected int sizeOf(String key, Bitmap value) { // 返回指定图片的大小 return value.getRowBytes()*value.getHeight(); } }; } /* * 从缓存中取出图片 * @see com.android.volley.toolbox.ImageLoader.ImageCache#getBitmap(java.lang.String) */ @Override public Bitmap getBitmap(String arg0) { // TODO Auto-generated method stub return cache.get(arg0); } /* * 把图片加入缓存中 * @see com.android.volley.toolbox.ImageLoader.ImageCache#putBitmap(java.lang.String, android.graphics.Bitmap) */ @Override public void putBitmap(String arg0, Bitmap arg1) { // TODO Auto-generated method stub cache.put(arg0, arg1); } }
第三种方法:
/** * 使用ImageLoader + NetworkImageView实现功能 * @param url 加载图片的地址 */ private void useNetworkImageLoader(String url) { // 创建ImageLoader对象 ImageLoader loader = new ImageLoader(MyApplication.getHttpQueues(), new BitmapCache()); //netIv是NetworkImageView对象。设置默认显示的图片 netIv.setDefaultImageResId(R.drawable.ic_launcher); //设置加载失败时显示的图片 netIv.setErrorImageResId(R.drawable.ic_launcher); //把地址和加载类联系起来,加载图片 netIv.setImageUrl(url, loader); }
运行测试上面3中方法后,我发现第三种方法加载的速度没有第一种和第二种快,所以建议的是使用第二种方法实现图片的加载,也就是ImageLoader+ImageView的方法。
相关文章推荐
- 红黑树插入算法(C++)
- 百度文库下载文件,没有财富的价值,音量不能下载
- ajaxFileUpload.js 插件的demo
- svn co 与ssl
- [iOS]The operation couldn’t be completed. (LaunchServicesError error 0.)
- Gradle教程
- Android中string.xml,动态改变数据方法
- 同一路由器或局域网linux与windows文件传输
- NSURLSession下载
- cmd中用PING命令时,出现'Ping' 不是内部或外部命令 解决方案
- 移动端IOS和androi及浏览器js判断[转载]
- SharePoint BCS
- CentOS6.5 使用phpize 配置mysql和pdo扩展
- 使用Java匿名类直接实例化接口
- html转义字符
- AsyncHttpClient的使用——Android 第一篇
- 正则表达式
- Python正则表达式指南
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
- Vim文本编辑器 指令簿(二)