volley中圖片載入
volley圖片載入有三種方式:
記得:Volley中已經實現了磁碟快取了,檢視原始碼得知通過
context.getCacheDir()獲取到了 /data/data/<application package>/cache內部儲存路徑,預設大小是5MB.所以我們只需要再實現記憶體快取就可以了
1. ImageRequest
1 singleImg=(ImageView)findViewById(R.id.volley_img_single_imgeview); 2 ImageRequest imgRequest=new ImageRequest(url, newResponse.Listener<Bitmap>() { 3 @Override 4 public void onResponse(Bitmap arg0) { 5 // TODO Auto-generated method stub 6 singleImg.setImageBitmap(arg0); 7 } 8 }, 300, 200, Config.ARGB_8888, new ErrorListener(){ 9@Override 10 public void onErrorResponse(VolleyError arg0) { 11 // TODO Auto-generated method stub 12 13 } 14 }); 15 mRequestQueue.add(imgRequest);
可以看到,ImageRequest的建構函式接收六個引數,第一個引數就是圖片的URL地址,這個沒什麼需要解釋的。第二個引數是圖片請求成功的回撥,這裡我們把返回的Bitmap引數設定到ImageView中。第三第四個引數分別用於指定允許圖片最大的寬度和高度,如果指定的網路圖片的寬度或高度大於這裡的最大值,則會對圖片進行壓縮,指定成0的話就表示不管圖片有多大,都不會進行壓縮。第五個引數用於指定圖片的顏色屬性,Bitmap.Config下的幾個常量都可以在這裡使用,其中ARGB_8888可以展示最好的顏色屬性,每個圖片畫素佔據4個位元組的大小,而RGB_565則表示每個圖片畫素佔據2個位元組大小。第六個引數是圖片請求失敗的回撥,這裡我們當請求失敗時在ImageView中顯示一張預設圖片。
最後將這個ImageRequest物件新增到RequestQueue裡就可以了
2. ImageLoader
1 RequestQueue mRequestQueue = Volley.newRequestQueue(this); 2 final LruCache<String, Bitmap> mImageCache = new LruCache<String, Bitmap>( 3 20); 4 ImageCache imageCache = new ImageCache() { 5 @Override 6 public void putBitmap(String key, Bitmap value) { 7 mImageCache.put(key, value); 8 } 9 10 @Override 11 public Bitmap getBitmap(String key) { 12 return mImageCache.get(key); 13 } 14 }; 15 ImageLoader mImageLoader = new ImageLoader(mRequestQueue, imageCache); 16 // imageView是一個ImageView例項 17 // ImageLoader.getImageListener的第二個引數是預設的圖片resource id 18 // 第三個引數是請求失敗時候的資源id,可以指定為0 19 ImageListener listener = ImageLoader 20 .getImageListener(imageView, android.R.drawable.ic_menu_rotate, 21 android.R.drawable.ic_delete); 22 mImageLoader.get(url, listener);
可以看出ImageLoader這個類需要一個Request的例項以及一個ImageCache的例項。圖片通過一個URL和一個ImageListener例項的get()方法就可以被載入。從哪裡,ImageLoader會檢查ImageCache,而且如果快取裡沒有圖片就會從網路上獲取。Volley的ImageCache介面允許你使用你喜歡的L1快取實現。不幸的是Volley沒有提供預設的實現。在I/O的介紹中展示了BitmapLruCache的一點程式碼片段,但是Volley這個庫本身並不包含任何相關的實現。
ImageCache介面有兩個方法,getBitmap(String url)和putBitmap(String url, Bitmap bitmap).這兩個方法足夠簡單直白,他們可以新增任何的快取實現。
3.NetworkImageView
除了以上兩種方式之外,Volley還提供了第三種方式來載入網路圖片,即使用NetworkImageView。不同於以上兩種方式,NetworkImageView是一個自定義控制,它是繼承自ImageView的,具備ImageView控制元件的所有功能,並且在原生的基礎之上加入了載入網路圖片的功能。NetworkImageView控制元件的用法要比前兩種方式更加簡單,大致可以分為以下五步:
1. 建立一個RequestQueue物件。
2. 建立一個ImageLoader物件。
3. 在佈局檔案中新增一個NetworkImageView控制元件。
4. 在程式碼中獲取該控制元件的例項。
5. 設定要載入的圖片地址。
其中,第一第二步和ImageLoader的用法是完全一樣的,因此這裡我們就從第三步開始學習了。首先修改佈局檔案中的程式碼,在裡面加入NetworkImageView控制元件,如下所示
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send Request" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/network_image_view" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
接著在Activity獲取到這個控制元件的例項,程式碼如下所示:
networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);
NetworkImageView控制元件的例項之後,我們可以呼叫它的setDefaultImageResId()方法、setErrorImageResId()方法和setImageUrl()方法來分別設定載入中顯示的圖片, 載入失敗時顯示的圖片,以及目標圖片的URL地址,如下所示:
1 networkImageView.setDefaultImageResId(R.drawable.default_image); 2 3 networkImageView.setErrorImageResId(R.drawable.failed_image); 4 5 networkImageView.setImageUrl("http://img.my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", imageLoader);
好了,就是這麼簡單,現在重新執行一下程式,你將看到和使用ImageLoader來載入圖片一模一樣的效果,這裡我就不再截圖了。
這時有的朋友可能就會問了,使用ImageRequest和ImageLoader這兩種方式來載入網路圖片,都可以傳入一個最大寬度和高度的引數來對圖片進行壓縮,而NetworkImageView中則完全沒有提供設定最大寬度和高度的方法,那麼是不是使用NetworkImageView來載入的圖片都不會進行壓縮呢?
其實並不是這樣的,NetworkImageView並不需要提供任何設定最大寬高的方法也能夠對載入的圖片進行壓縮。這是由於NetworkImageView是一個控制元件,在載入圖片的時候它會自動獲取自身的寬高,然後對比網路圖片的寬度,再決定是否需要對圖片進行壓縮。也就是說,壓縮過程是在內部完全自動化的,並不需要我們關心,NetworkImageView會始終呈現給我們一張大小剛剛好的網路圖片,不會多佔用任何一點記憶體,這也是NetworkImageView最簡單好用的一點吧。
當然了,如果你不想對圖片進行壓縮的話,其實也很簡單,只需要在佈局檔案中把NetworkImageView的layout_width和layout_height都設定成wrap_content就可以了,這樣NetworkImageView就會將該圖片的原始大小展示出來,不會進行任何壓縮。
這樣我們就把使用Volley來載入網路圖片的用法都學習完了。
下一篇我們繼續介紹Volley中的json處理..........
相關推薦
volley中圖片載入
volley圖片載入有三種方式: 記得:Volley中已經實現了磁碟快取了,檢視原始碼得知通過 context.getCacheDir()獲取到了 /data/data/<application package>/cache內部儲存路徑,預設大小是5MB.所以我們只需要再實現記憶體快取就可以了
原生JS判斷頁面中圖片載入完成
自己寫的判斷頁面中圖片載入完成的方法,用原生JS完成,不用jq主要考慮在不載入jq的情況下,程式碼可以正常執行 判斷指定ID的盒子中所有圖片載入,demo程式碼如下: <!DOCTYPE HTML> <html> <head> &l
java 標籤中圖片載入不完全問題
第一步,檢視要載入的圖片的大小資訊,例如1025*768.(具體方法可以用window是自帶畫圖工具,點選重新調整大小,點選畫素) 第二步,按百分比或畫素按需要調整圖片大小,把調整過後的圖片大小設定為
Android中圖片載入框架Picasso的使用
技術要點 基本顯示(非同步載入,圖片壓縮,圖片快取) 載入中和載入錯誤的圖片顯示 設定圖片尺寸(Resize)、縮放(Scale)和裁剪(Crop) 圖片旋轉 設定轉換器 取消預設的記憶體快取 設定快取指示器 請求優先順序設定 圖片還未加載出來時取消
Android的listview中圖片載入的優化
費了好大勁寫玩才發現早就有現成的三方(glide)了,還是記下來吧。 為什麼優化?因為圖片大了很容易超出記憶體導致崩潰。 原理很簡單,壓縮圖片,儲存。 工具類。 import android.graphics.Bitmap; import android.graphics.
React Native ListView中圖片載入優化處理(三)
在手機應用中,圖片列表的滾動操作是非常常見的,而且這個功能一般使用者的期望都比較高,需要很不錯的使用者體驗。在上一篇文章中(點選進入),我們主要分享瞭如何實現React Native中的圖片快取,在本文中我將會給大家帶來在圖片列表滾動過程中如何進行優化Li
vue中的圖片載入與顯示預設圖片
原部落格地址:https://www.cnblogs.com/xulei1992/p/6558294.html <div class="content-show-img"> <div class="show-img"> <img cl
iOS 如何計算圖片載入記憶體中所佔的大小
首先圖片自動縮放到2的n次方大小,例如200 * 300畫素 會變成256 * 512大小。 圖片記憶體大小的計算公式 寬度 * 高度 * bytesPerPixel/8。 bytesPerPixel : 每個畫素所佔的位元組數。 RGB顏色空間下 每個顏色分量由8位組成
BitmapFactory.decodeStream方法及如何將Raw中的圖片載入為Bitmap
結論 將輸入流傳遞給 BitmapFactory.decodeStream(in) 方法,建立完成 Bitmap 之後,開發者一定要主動去關閉這個輸入流。否則,對輸入流執行 reset() 方法,則可以重新獲取輸入流中的所有資料,並且創建出一張新的圖片。 從res-raw目錄下獲取一張Bit
在應用中顯示的圖片很多情況不滿足業務需求,我們需要動態根據圖片的寬高進行縮放或載入中顯示的預設圖片,這是我沒就需要監聽圖片載入完成回撥,來看看微信小程式怎麼實現圖片載入完成回撥。
<swiper-item> <image src="{{item.image}}" class="slide-image" mode="widthFix" @tap="bannerjump({{item.l
網頁中圖片預載入的原理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
listview載入圖片過程中,圖片載入不一致原理。
//主介面佈局 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com
一對一視訊交友原始碼中關於圖片載入和部分自定義控制元件的原始碼
有這麼一部分原始碼,他們不如音視訊採集、播放部分的原始碼顯得那麼重要,但他們的存在使頁面看起來更美觀流暢,他們就是: 一、關於圖片載入的一段程式碼: 1、載入原圖,即沒有壓縮、裁剪、變換之前的圖,保持了原圖的大小、尺寸和解析度。 public static void displaySou
【轉】Qml中Image載入圖片再不同平臺的方式
今天用QML中Image載入win系統下的本地路徑圖片的時候, 發現無論加絕對路徑或file://+path都打不開,就很奇怪,經過一番 查閱發現,各個系統的載入方式都不相同, win系統: Image { id: preview
載入 Bundle 中圖片的三種方法
第一種方法 NSString *path = [[NSBundle mainBundle] pathForResource:@"myBundle" ofType:@"bundle"]; NSBun
Android 圖片載入框架 Volley框架原始碼 以及Picasso和Glide比較
首先了解一下,它是封裝了HTTPConnection和HTTPClient類的一個框架, 適用於資料量少但是通訊頻繁的情況,如載入圖片; 就拿StringRequest(用來請求字串的)舉例: Volley的順序是 : Http請求-------再接受響應 只
mfc中圖片控制元件上載入PNG圖片
就一個載入png圖片的程式弄了一下午,想哭。 ***在stadfx.h檔案中新增 #include <comdef.h>//初始化一下com口 #include "gdiplus.h" using namespace Gdiplus; #pragma
列表中Glide載入圖片大小顯示不正常問題
Glide載入圖片時大時小 前言:最近在專案中發現了一個奇怪的現象,在列表的item佈局中使用了glide來載入網路圖片,奇怪的現象出現了…同一張圖,同一份資料,有的時候顯示正常,有的時候該圖片顯示出來會稍微小一圈… 解決辦法:百思不得其解,找了很多資料,以為對recyclervie
常用圖片載入框架比較(Glide、volley、Picasso)
Volley 一、ImageRequest: 來對網路圖片進行請
Android中WebView載入Html中的圖片新增點選事件
基本的思路: (1)WebView來載入HTML。 (2)向HTML中注入JavaScript,利用JavaScript來呼叫Android中的方法(執行一些跳轉的操作等等)。 首先你必須有一個HTML或者是一個地址,或者是存到本地的一個檔案。我這裡使用的是存到本