使用Volley加载图片列表

Android开发者可能会使用Universal Image Loader或者Square`s newer Picasso这些第三方的库去处理图片的加载,那么Volley是怎么加载图片列表的呢,这一篇文章会介绍使用Volley加载图片列表。

    在Google I/O介绍Volley的时候,Ficus Kirpatrick讲了很多关于Volley如何的有助于图片加载。但是,你会发现在Volley作为图片加载解决方案的时候,Volley虽然自己处理了L2的缓存,可是它没有处理L1的缓存。它给出了ImageCache接口类,让开发者自己根据自己的需求实现自己L1缓存,这样你可以实现LRU、FIFO等算法的缓存。

     Volley加载图片时需要使用ImageLoader,ImageLoader初始化一次。展示图片的View可以使用ImageView或者Volley自定义的NetworkImageView。NetworkImageView可以使用setUrl方法获取图片。下面为两种View加载图片的方式。


使用ImageView:

[java]  view plain copy print ?
  1. public class VolleyImageViewListAdapter extends BaseAdapter{  
  2.   
  3.     private static final String TAG = "VolleyListAdapter";  
  4.       
  5.     private Context mContext;  
  6.     private String[] urlArrays;  
  7.     private ImageLoader mImageLoader;  
  8.   
  9.       
  10.       
  11.     public VolleyImageViewListAdapter(Context context, String []url) {  
  12.         this.mContext = context;  
  13.         urlArrays = url;  
  14.   
  15.         RequestQueue mQueue = Volley.newRequestQueue(context);    
  16.         mImageLoader = new ImageLoader(mQueue, new BitmapCache());   
  17.     }  
  18.       
  19.   
  20.     @Override  
  21.     public int getCount() {  
  22.         return urlArrays.length;  
  23.     }  
  24.   
  25.     @Override  
  26.     public Object getItem(int position) {  
  27.         return position;  
  28.     }  
  29.   
  30.     @Override  
  31.     public long getItemId(int position) {  
  32.         return position;  
  33.     }  
  34.   
  35.     @Override  
  36.     public View getView(int position, View convertView, ViewGroup parent) {  
  37.   
  38.         ViewHolder viewHolder = null;  
  39.         if (convertView == null) {  
  40.             convertView = LayoutInflater.from(mContext).inflate(  
  41.                     R.layout.volley_image_list_item, null);  
  42.             viewHolder = new ViewHolder();  
  43.             viewHolder.mTextView = (TextView) convertView  
  44.                     .findViewById(R.id.tv_tips);  
  45.             viewHolder.mImageView = (ImageView) convertView  
  46.                     .findViewById(R.id.iv_image);  
  47.             convertView.setTag(viewHolder);  
  48.         } else {  
  49.             viewHolder = (ViewHolder) convertView.getTag();  
  50.         }  
  51.         String url = "";  
  52.         url = urlArrays[position % urlArrays.length];  
  53.           
  54.   
  55.         viewHolder.mTextView.setText(position+"|"+urlArrays.length) ;  
  56.         ImageListener listener = ImageLoader.getImageListener(viewHolder.mImageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);    
  57.         mImageLoader.get(url, listener);    
  58.         return convertView;  
  59.     }  
  60.   
  61.     static class ViewHolder {  
  62.         TextView mTextView;  
  63.         ImageView mImageView;  
  64.     }  
  65.       
  66.       
  67.     public class BitmapCache implements ImageCache {    
  68.         private LruCache<String, Bitmap> mCache;    
  69.             
  70.         public BitmapCache() {    
  71.             int maxSize = 10 * 1024 * 1024;    
  72.             mCache = new LruCache<String, Bitmap>(maxSize) {    
  73.                 @Override    
  74.                 protected int sizeOf(String key, Bitmap value) {    
  75.                     return value.getRowBytes() * value.getHeight();    
  76.                 }    
  77.                     
  78.             };    
  79.         }    
  80.         
  81.         @Override    
  82.         public Bitmap getBitmap(String url) {    
  83.             return mCache.get(url);    
  84.         }    
  85.         
  86.         @Override    
  87.         public void putBitmap(String url, Bitmap bitmap) {    
  88.             mCache.put(url, bitmap);    
  89.         }    
  90.         
  91.     }    
  92. }  

使用 NetworkImageView:

[java]  view plain copy print ?
  1. public class VolleyListAdapter extends BaseAdapter{  
  2.   
  3.     private static final String TAG = "VolleyListAdapter";  
  4.       
  5.     private Context mContext;  
  6.     private String[] urlArrays;   
  7.       
  8.     public VolleyListAdapter(Context context, String []url) {  
  9.         this.mContext = context;  
  10.         urlArrays = url;  
  11.     }  
  12.       
  13.     @Override  
  14.     public int getCount() {  
  15.         return urlArrays.length;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Object getItem(int position) {  
  20.         return position;  
  21.     }  
  22.   
  23.     @Override  
  24.     public long getItemId(int position) {  
  25.         return position;  
  26.     }  
  27.   
  28.     @Override  
  29.     public View getView(int position, View convertView, ViewGroup parent) {  
  30.   
  31.         ViewHolder viewHolder = null;  
  32.         if (convertView == null) {  
  33.             convertView = LayoutInflater.from(mContext).inflate(  
  34.                     R.layout.volley_list_item, null);  
  35.             viewHolder = new ViewHolder();  
  36.             viewHolder.mTextView = (TextView) convertView  
  37.                     .findViewById(R.id.tv_tips);  
  38.             viewHolder.mImageView = (NetworkImageView) convertView  
  39.                     .findViewById(R.id.iv_image);  
  40.             convertView.setTag(viewHolder);  
  41.         } else {  
  42.             viewHolder = (ViewHolder) convertView.getTag();  
  43.         }  
  44.         String url = "";  
  45.         url = urlArrays[position % urlArrays.length];  
  46.   
  47.         viewHolder.mTextView.setText(position+"|"+urlArrays.length) ;     
  48.         viewHolder.mImageView.setImageUrl(url, ImageCacheManager.getInstance().getImageLoader());  
  49.           
  50.         return convertView;  
  51.     }  
  52.   
  53.     static class ViewHolder {  
  54.         TextView mTextView;  
  55.         NetworkImageView mImageView;  
  56.     }  
  57. }  

效果图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值