Volley进行图片加载和图片缓存

来源:互联网 发布:wpf编程宝典 c 2010 编辑:程序博客网 时间:2024/04/26 12:11

在开发中我们经常遇到需要对图片进行加载和缓存的情况,Volley框架为我们提供多种图片加载的方法,我们可以根据项目的需求选择响应的方法,解决图片加载、图片缓存会变得非常简单。下面我将介绍Volley框架进行图片加载和图片缓存的使用步骤:

1、实现ImageCache

package com.example.test;import com.android.volley.toolbox.ImageLoader.ImageCache;import android.graphics.Bitmap;import android.util.LruCache;/*********************************************** ** 创建人:黎荣恒 ** 日 期 : 2015年12月1日 上午9:44:43 ** 描述 : 图片缓存 **  ** 版 本 : 1.0 修改人: 日 期 : 修改记录: ************************************************/public class BitmapCache implements ImageCache{public LruCache<String, Bitmap> cache;public int max = 10 * 1024 * 1024;//规定最大缓存为10兆,如果超过了10兆自动回收public BitmapCache(){cache = new LruCache<String, Bitmap>(max){@Overrideprotected int sizeOf(String key, Bitmap value){return value.getRowBytes() * value.getHeight();}};}@Overridepublic Bitmap getBitmap(String url){return cache.get(url);}@Overridepublic void putBitmap(String url, Bitmap bitmap){cache.put(url, bitmap);}}

2、布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     >        <ImageView         android:id="@+id/iv_img1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="15dp"/>        <ImageView         android:id="@+id/iv_img2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="30dp"/>        <com.android.volley.toolbox.NetworkImageView         android:id="@+id/networkImageView"        android:layout_width="300dp"        android:layout_height="300dp"        android:layout_marginTop="30dp"/></LinearLayout>

3、下面就是加载图片的三种方式,其中前面的一种方法不进行图片缓存,后面两种加载方法会进行图片的缓存,直接上代码

package com.example.test;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.os.Bundle;import android.widget.ImageView;import android.widget.Toast;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.VolleyError;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.ImageLoader.ImageListener;import com.android.volley.toolbox.ImageRequest;import com.android.volley.toolbox.NetworkImageView;/*********************************************** ** 创建人: 黎荣恒  ** 日 期 : 2015年11月30日 下午6:32:08 ** 描述 : Volley加载图片 **  ** 版 本 : 1.0 修改人: 日 期 : 修改记录: ************************************************/public class LoadImageActivity extends Activity{private ImageView imageView1,imageView2;private NetworkImageView mNetworkImageView;String url = "http://www.logoing.net/wp-content/uploads/2012/08/baidulogo1.jpg";@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.loadimage_activity);imageView1 = (ImageView) findViewById(R.id.iv_img1);imageView2 = (ImageView) findViewById(R.id.iv_img2);mNetworkImageView = (NetworkImageView) findViewById(R.id.networkImageView);loadImage();cacheImage();networkImageViewLoad();}/** * 使用ImageRequest进行图片加载,不进行缓存 */private void loadImage(){/** * 图片请求对象 * 第一个参数:请求接口 * 第二个参数:请求成功监听 * 第三个参数:请求到的图片最大的宽度    如果是0表示图片默认大小 * 第四个参数:请求到的图片最大的高度    如果是0表示图片默认大小 * 第五个参数:图片格式 * 第六个参数:请求失败监听 */ImageRequest imageRequest = new ImageRequest(url, new Listener<Bitmap>() {@Overridepublic void onResponse(Bitmap response){imageView1.setImageBitmap(response);}}, 0, 0, Config.RGB_565, new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error){Toast.makeText(LoadImageActivity.this, "图片请求失败", Toast.LENGTH_LONG).show();}});//添加任务到请求队列VolleySingleton.getVolleySingleton(getApplicationContext()).addToRequestQueue(imageRequest);}/** * ImageLoader加载图片并进行缓存 */private void cacheImage(){ImageLoader loader = new ImageLoader(VolleySingleton.getVolleySingleton(getApplicationContext()).getRequestQueue(),new BitmapCache());/** * 第一个参数:图片加载完成用于先是图片的控件 第二个参数:默认图片 第三个参数:加载出错显示的图片 */ImageListener listener = ImageLoader.getImageListener(imageView2,R.drawable.ic_launcher, R.drawable.ic_launcher);loader.get(url, listener);// 加载的图片不进行压缩// loader.get(requestUrl, imageListener, maxWidth,maxHeight);//进行压缩,规定图片的最大宽高}/** * 使用ImageLoader和NetworkImageView的结合进行图片的加载和缓存 */private void networkImageViewLoad(){ImageLoader loader = new ImageLoader(VolleySingleton.getVolleySingleton(getApplicationContext()).getRequestQueue(),new BitmapCache());//设置显示的默认图片mNetworkImageView.setDefaultImageResId(R.drawable.ic_launcher);//加载出错显示的图片mNetworkImageView.setErrorImageResId(R.drawable.ic_launcher);mNetworkImageView.setImageUrl(url, loader);}}



项目源码下载地址:http://download.csdn.net/detail/u013043346/9315759

0 0
原创粉丝点击