Volley缓存方式下载图片

来源:互联网 发布:期货数据分析 编辑:程序博客网 时间:2024/03/28 18:44
/**通过Volley内部封装的缓存机制,解决图片错位和加载闪退问题 * 步骤 * ①实现Volley下的ImageCache接口 * ②用Volley封装好的控件NetworkImageView * ③设置NetworkImageView的默认、失败、成功图片 *  参数中会需要Volley下的ImageLoader类,要实例化一个ImageLoader对象 *  */import java.util.List;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.NetworkImageView;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;public class MainActivity extends Activity {    private GridView gv;    private String imgUrlArray [];    private ImageLoader loader;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imgUrlArray=ImageData.imgUrlArray;        loader=new ImageLoader(MyApplication.getRequestQueue(), new ImageCache());        gv=(GridView)findViewById(R.id.gv);        gv.setAdapter(new GV_adapter());    }    class GV_adapter extends BaseAdapter{        @Override        public int getCount() {            return imgUrlArray.length;        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            NetworkImageView img=null;            if(convertView==null){                img=(NetworkImageView) new NetworkImageView(MainActivity.this);                convertView=img;                convertView.setTag(img);            }else{                img=(NetworkImageView) convertView.getTag();            }            String path=imgUrlArray[position];            img.setDefaultImageResId(R.drawable.ic_launcher);//默认图片            img.setErrorImageResId(R.drawable.ic_launcher);//下载失败 显示图片            img.setImageUrl(path, loader);//下载成功显示图片            return convertView;        }    }}

package com.example.volley2;

import android.graphics.Bitmap;
import android.util.LruCache;
/**
* ImageCache接口————-整个接口都由Volley内部调用
* ① 声明一个缓存对象
* ②在构造方法中实例化缓存对象并重写sizeof方法
* ③在getBitmap方法总返回Bitmap
* ④在putBitmap方法中保存Bitmap
* @author Administrator
*
*/

public class ImageCache implements com.android.volley.toolbox.ImageLoader.ImageCache{

private LruCache<String, Bitmap> lruCache;//缓存对象private int max=1024*1024*10;//10M 缓存区最大空间public ImageCache() {    lruCache=new LruCache<String, Bitmap>(max){        @Override        protected int sizeOf(String key, Bitmap value) {            return value.getRowBytes()*value.getHeight();        }    };}@Overridepublic Bitmap getBitmap(String arg0) {    return lruCache.get(arg0);}@Overridepublic void putBitmap(String arg0, Bitmap arg1) {    lruCache.put(arg0, arg1);}

}

public class MyApplication extends Application{    private static RequestQueue rq;    @Override    public void onCreate() {        super.onCreate();        rq=Volley.newRequestQueue(getApplicationContext());    }    public static RequestQueue getRequestQueue(){        return rq;    }}
0 0
原创粉丝点击