publicclassBitmapCacheimplementsImageCache {
// 如果想让整个项目共用一个图片缓存,那么这里可以将mCache设置成静态
privateLruCache<String, Bitmap>mCache;
publicBitmapCache() {
if (mCache == null) {
// 分配10M的缓存空间
intmaxSize = 10 * 1024 * 1024;
mCache = newLruCache<String, Bitmap>(maxSize) {
@Override
protectedintsizeOf(String key, Bitmap value) {
returnvalue.getRowBytes() * value.getHeight();
}
};
}
}
@Override
public Bitmap getBitmap(String url) {
returnmCache.get(url);
}
@Override
publicvoidputBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
Log.d(getClass().getSimpleName(), "cacheSize/maxSize:" + mCache.size() + "/" + mCache.maxSize());
}
}
|
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_volley_list, null);
holder = newViewHolder();
holder.img = (ImageView) convertView.findViewById(R.id.item_img);
holder.name = (TextView) convertView.findViewById(R.id.item_txt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
VolleyItem item = items.get(position);
holder.name.setText(item.getName());
// 利用Volley加载图片
ImageListener listener = ImageLoader.getImageListener(holder.img, 0, R.drawable.mz_img_error);
mImageLoader.get(item.getImgUrl(), listener);
returnconvertView;
}
|
/**
* 初始化List
*/
privatevoidinitList() {
mListView = (ListView) findViewById(R.id.volley_listview);
// TODO初始化数据
ArrayList<VolleyItem> items = newArrayList<VolleyItem>(LIST_SIZE);
String imgUrl = "http://img0.bdstatic.com/img/image/%E6%9C%AA%E6%A0%87%E9%A2%98-1.jpg";
for (inti = 1; i<= LIST_SIZE; i++) {
VolleyItem item = newVolleyItem();
item.setName("我所看到的香港-" + i);
// TODO为图片地址添加一个尾数,是为了多次访问图片,而不是读取第一张图片的缓存
item.setImgUrl(imgUrl + "?rank=" + i);
items.add(item);
}
// TODO绑定数据
mAdapter = newVolleyListAdapter(this, mQueue, items);
mListView.setAdapter(mAdapter);
}
|
Volley将图片放入一个HashMap中,key就是图片的url,value就是图片,所以为图片地址添加一个尾数,就可以实现每次图片都是重新加载的,而不是读取第一张图片的缓存!
更多android开发教学视频尽在麦子学院:www.maiziedu.com