Android利用Volley框架加載網絡圖片
Volley框架是在Google I/O 2013上Volley發布的,目的是使Android平臺上的網絡通信庫,能使網絡通信更快,更簡單,更健壯。我們也簡單了解下Volley引入的背景,在Volley出現以前,我們可能面臨如下的問題,比如要在ListView或是GridView中加載數量較多的圖片時:先在ListAdapter#getView()里開始圖像的讀取,再通過AsyncTask等機制使用HttpURLConnection從服務器去的圖片資源,然后在AsyncTask#onPostExecute()里設置相應ImageView的屬性。這樣下來不僅僅步驟繁瑣,而且不考慮周全的話,還可能出現OOM等問題。現在有了Volley后我們只需要一個函數即可實網絡圖片的加載。簡單地講Volley功能有:
- JSON,圖像等的異步加載;
- 網絡請求的排序;
- 網絡請求的優先級處理;
- 圖片緩存;
- 多級別取消請求;
- 和Activity生命周期的聯動(Activity結束時同時取消所有網絡請求)等。
今天先簡單貼下用Volley加載網絡圖片,下次有時間再貼下用Volley實現http請求及json數據加載。用Volley加載網絡圖片常用有兩種方式,一種是用ImageLoader,另外是用Volley封裝好的圖片控件NetworkImageView: - 第一種方式步驟:
- 創建一個RequestQueue對象,就一句話:
RequestQueue mQueue = Volley.newRequestQueue(context);
- 創 建一個ImageLoader對象,
ImageLoader mImageLoader= new ImageLoader(mRequestQueue, new BitmapLruCache(cacheSize)); public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache { public BitmapLruCache(int maxSize) { super(maxSize); } protected int sizeOf(String key, Bitmap bitmap) { return (bitmap.getRowBytes() * bitmap.getHeight()); } public Bitmap getBitmap(String url) { return ((Bitmap) get(url)); } public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } }***
創建ImageLoader中的參數cacheSize就是我們設置的緩存文件最大值,比如可以設置int cacheSize= 10 * 1024 * 1024; - 創建ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.failed_image);//imageView參數就是我們要展示圖片的控件
- 然后就可以加載圖片了:imageLoader.get("http://www.xxxxxxx.jpg", listener);//傳入圖片url及上面創建的listener就可OK.
- 第二種方式,就是利用Volley封裝好的NetworkImageView加載圖片。
- 這種方式更簡單,把NetworkImageView當成我們平時用的ImageView放到我們要加載圖片的布局xml中,在對應的代碼中用NetworkImageView imageView=findViewById();找到控件,
- networkImageView.setDefaultImageResId(R.drawable.default_icon);//加載中顯示的圖片
networkImageView.setErrorImageResId(R.drawable.failed_icon);//加載失敗時顯示的圖片
networkImageView.setImageUrl("http://xxxxxxx.jpeg",imageLoader);//目標圖片的URL地址(第一個參數用于指定圖片的URL地址,第二個參數則是上面創建好的ImageLoader對象)。
本文由用戶 wgd7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!