Android UI開發第三十六篇——使用Volley載入圖片列表
Android開發者可能會使用Universal Image Loader或者Square`s
newer Picasso這些第三方的庫去處理圖片的載入,那麼Volley是怎麼載入圖片列表的呢,這一篇文章會介紹使用Volley載入圖片列表。
使用NetworkImageView:
效果圖:
在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:
- public class VolleyImageViewListAdapter extends BaseAdapter{
- private static final String TAG = "VolleyListAdapter";
- private Context mContext;
- private String[] urlArrays;
- private ImageLoader mImageLoader;
- public VolleyImageViewListAdapter(Context context, String []url) {
- this.mContext = context;
- urlArrays = url;
- RequestQueue mQueue = Volley.newRequestQueue(context);
- mImageLoader = new ImageLoader(mQueue, new BitmapCache());
- }
- @Override
- public int getCount() {
- return urlArrays.length;
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder viewHolder = null;
- if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(
- R.layout.volley_image_list_item, null);
- viewHolder = new ViewHolder();
- viewHolder.mTextView = (TextView) convertView
- .findViewById(R.id.tv_tips);
- viewHolder.mImageView = (ImageView) convertView
- .findViewById(R.id.iv_image);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) convertView.getTag();
- }
- String url = "";
- url = urlArrays[position % urlArrays.length];
- viewHolder.mTextView.setText(position+"|"+urlArrays.length) ;
- ImageListener listener = ImageLoader.getImageListener(viewHolder.mImageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);
- mImageLoader.get(url, listener);
- return convertView;
- }
- static class ViewHolder {
- TextView mTextView;
- ImageView mImageView;
- }
- public class BitmapCache implements ImageCache {
- private LruCache<String, Bitmap> mCache;
- public BitmapCache() {
- int maxSize = 10 * 1024 * 1024;
- mCache = new LruCache<String, Bitmap>(maxSize) {
- @Override
- protected int sizeOf(String key, Bitmap value) {
- return value.getRowBytes() * value.getHeight();
- }
- };
- }
- @Override
- public Bitmap getBitmap(String url) {
- return mCache.get(url);
- }
- @Override
- public void putBitmap(String url, Bitmap bitmap) {
- mCache.put(url, bitmap);
- }
- }
- }
使用NetworkImageView:
- public class VolleyListAdapter extends BaseAdapter{
- private static final String TAG = "VolleyListAdapter";
- private Context mContext;
- private String[] urlArrays;
- public VolleyListAdapter(Context context, String []url) {
- this.mContext = context;
- urlArrays = url;
- }
- @Override
- public int getCount() {
- return urlArrays.length;
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder viewHolder = null;
- if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(
- R.layout.volley_list_item, null);
- viewHolder = new ViewHolder();
- viewHolder.mTextView = (TextView) convertView
- .findViewById(R.id.tv_tips);
- viewHolder.mImageView = (NetworkImageView) convertView
- .findViewById(R.id.iv_image);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) convertView.getTag();
- }
- String url = "";
- url = urlArrays[position % urlArrays.length];
- viewHolder.mTextView.setText(position+"|"+urlArrays.length) ;
- viewHolder.mImageView.setImageUrl(url, ImageCacheManager.getInstance().getImageLoader());
- return convertView;
- }
- static class ViewHolder {
- TextView mTextView;
- NetworkImageView mImageView;
- }
- }
效果圖:
/**
* @author 張興業
相關文章
- Android Volley 原始碼解析(三),圖片載入的實現Android原始碼
- Android應用開發-圖片載入庫GlideAndroidIDE
- Android 圖片載入框架Android框架
- android 載入大量圖片Android
- Android圖片載入框架Fresco使用詳解Android框架
- 快速Android開發系列網路篇之VolleyAndroid
- Android圖片載入庫Glide 知其然知其所以然 開篇AndroidIDE
- Android 載入大圖片,不壓縮圖片Android
- Android開發教程 - 使用Data Binding(七)使用BindingAdapter簡化圖片載入AndroidAPT
- Android 高效安全載入圖片Android
- 迴圈列表圖片載入出錯處理
- Android圖片載入的框架Fresco使用詳解Android框架
- 視訊直播app原始碼,Android RecyclerView 列表載入圖片寬高適配APP原始碼AndroidView
- HTML使用canvas載入圖片HTMLCanvas
- iOS開發UI篇--使用UICollectionView實現一個傾斜列表效果iOSUIView
- android glide圖片載入框架AndroidIDE框架
- Android9.0使用Glide載入圖片問題AndroidIDE
- android-smart-image-view圖片載入簡單使用AndroidView
- Android 6種載入網路圖片的第三方詳解Android
- Android ImageLoader框架之圖片載入與載入策略Android框架
- Android圖片載入開源庫深度推薦,安利FrescoAndroid
- Android 基礎之圖片載入(二)Android
- Android偽圖片載入進度效果Android
- iOS開發UI中懶載入的使用方法iOSUI
- Android使用Fresco之下載圖片(包括GIF圖)Android
- android Volley登入驗證的使用Android
- 使用代理模式改善SAP UI5應用的圖片載入體驗模式UI
- Android 載入網路圖片 以及實現圓角圖片效果Android
- Android 圖片載入框架 Picasso 基本使用和原始碼完全解析Android框架原始碼
- [原]Android官方圖片載入利器BitmapFun解析Android
- Android實現圖片非同步載入操作Android非同步
- FaceBook推出的Android圖片載入庫FrescoAndroid
- Android圖片載入庫Picasso原始碼分析Android原始碼
- AlamofireImage 使用 – swift載入網路圖片,縮放圖片,生成圓形圖片Swift
- Flutter 圖片載入Flutter
- 圖片懶載入
- 預載入圖片
- 圖片載入事件事件