1. 程式人生 > >Universal-Image-Loader圖片非同步載入類庫

Universal-Image-Loader圖片非同步載入類庫

這是 一個開源的Android關於下載顯示圖片的工具類,在這個下載包裡面jar檔案,用於我們匯入專案使用,具體使用方法在包裡面也含有。下面是一個例子:

雙擊程式碼複製

1

2

<uses-permissionandroid:name="android.permission.INTERNET"/>  

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

由於是使用過程中會圖片獲取要通過網路,並且有快取設定,所以這2個許可權必須要有。

很多人想知道如何設定快取的目錄,可以通過以下方法:

雙擊程式碼複製

1

File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");

//這個是你希望的快取檔案的目錄:imageloader/Cache

之後在ImageLoaderConfiguration的配置檔案中通過設定

雙擊程式碼複製

1

.discCache(newUnlimitedDiscCache(cacheDir))//自定義快取路徑

方法來設定該應用的圖片快取路徑。

下面我們就來開始看如何使用這個圖片非同步載入庫把:

.

先要配置ImageLoaderConfiguration

這個類實現全域性ImageLoader的實現情況。

可以選擇在Application中初始化設定該類。

雙擊程式碼複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

ImageLoaderConfiguration config = newImageLoaderConfiguration  

.Builder(context)  

.memoryCacheExtraOptions(480800// max width, max height,即儲存的每個快取檔案的最大長寬  

.discCacheExtraOptions(480800, CompressFormat.JPEG, 

75null// Can slow ImageLoader, use it carefully (Better don't use it)/設定快取的詳細資訊,最好不要設定這個  

.threadPoolSize(3)//執行緒池內載入的數量  

.threadPriority(Thread.NORM_PRIORITY - 2)  

.denyCacheImageMultipleSizesInMemory()  

.memoryCache(newUsingFreqLimitedMemoryCache(210241024)) // You can pass your own memory cache implementation/你可以通過自己的記憶體快取實現  

.memoryCacheSize(210241024)    

.discCacheSize(5010241024)    

.discCacheFileNameGenerator(newMd5FileNameGenerator())//將儲存的時候的URI名稱用MD5 加密  

.tasksProcessingOrder(QueueProcessingType.LIFO)  

.discCacheFileCount(100//快取的檔案數量  

.discCache(newUnlimitedDiscCache(cacheDir))//自定義快取路徑  

.defaultDisplayImageOptions(DisplayImageOptions.createSimple())  

.imageDownloader(newBaseImageDownloader(context, 51000301000)) // connectTimeout (5 s), readTimeout (30 s)超時時間  

.writeDebugLogs() // Remove for release app  

.build();//開始構建  

// Initialize ImageLoader with configuration.

以上的配置看個人需求進行選擇,不是所有都要進行配置。

配置好ImageLoaderConfiguration後,呼叫以下方法來實現初始化:

雙擊程式碼複製

1

ImageLoader.getInstance().init(config);//全域性初始化此配置

注:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是將快取下來的檔案以什麼方式命名

裡面可以呼叫的方法有  1.new Md5FileNameGenerator() //使用MD5UIL進行加密命名

2.new HashCodeFileNameGenerator()//使用HASHCODEUIL進行加密命名

.

        使用ImageLoader進行圖片載入的時候,先要例項化ImageLoader,呼叫以下方法進行例項化,在每個佈局裡面都要例項化後再使用。

雙擊程式碼複製

1

protectedImageLoader imageLoader = ImageLoader.getInstance();

之後進行顯示的圖片的各種格式DisplayImageOptions 的設定:

雙擊程式碼複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

DisplayImageOptions options;  

options = newDisplayImageOptions.Builder()  

.showImageOnLoading(R.drawable.ic_launcher) //設定圖片在下載期間顯示的圖片  

.showImageForEmptyUri(R.drawable.ic_launcher)//設定圖片Uri為空或是錯誤的時候顯示的圖片  

.showImageOnFail(R.drawable.ic_launcher)  //設定圖片載入/解碼過程中錯誤時候顯示的圖片

.cacheInMemory(true)//設定下載的圖片是否快取在記憶體中  

.cacheOnDisc(true)//設定下載的圖片是否快取在SD卡中  

.considerExifParams(true)  //是否考慮JPEG影象EXIF引數(旋轉,翻轉)

.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//設定圖片以如何的編碼方式顯示  

.bitmapConfig(Bitmap.Config.RGB_565)//設定圖片的解碼型別//  

.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//設定圖片的解碼配置  

//.delayBeforeLoading(int delayInMillis)//int delayInMillis為你設定的下載前的延遲時間

//設定圖片加入快取前,對bitmap進行設定  

//.preProcessor(BitmapProcessor preProcessor)  

.resetViewBeforeLoading(true)//設定圖片在下載前是否重置,復位  

.displayer(newRoundedBitmapDisplayer(20))//是否設定為圓角,弧度為多少  

.displayer(newFadeInBitmapDisplayer(100))//是否圖片載入好後漸入的動畫時間  

.build();//構建完成

按照你所需要的配置去設定,如果不需要的就可以不做配置。

注:

以上配置中的:

 1.imageScaleType(ImageScaleType imageScaleType)  是設定圖片的縮放方式縮放型別mageScaleType:

EXACTLY :影象將完全按比例縮小的目標大小

EXACTLY_STRETCHED:圖片會縮放到目標大小完全

IN_SAMPLE_INT:影象將被二次取樣的整數倍

IN_SAMPLE_POWER_OF_2:圖片將降低2倍,直到下一減少步驟,使影象更小的目標大小

NONE:圖片不會調整2.displayer(BitmapDisplayer displayer)   是設定圖片的顯示方式

顯示方式displayer

RoundedBitmapDisplayerint roundPixels)設定圓角圖片

FakeBitmapDisplayer()這個類什麼都沒做

FadeInBitmapDisplayerint durationMillis)設定圖片漸顯的時間

SimpleBitmapDisplayer()正常顯示一張圖片

之後按照需求呼叫

1.純粹為了載入預設配置的一個圖片的

方法:

  public void displayImage(String uri, ImageView imageView) {}

  具體實現:

雙擊程式碼複製

1

ImageLoader.getInstance().displayImage(imageUrl, imageView); // imageUrl代表圖片的URL地址,imageView代表承載圖片的IMAGEVIEW控制元件

2.載入自定義配置的一個圖片的

方法:

  public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {}

  具體實現:

雙擊程式碼複製

1

ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl代表圖片的URL地址,imageView代表承載圖片的IMAGEVIEW控制元件 , options代表DisplayImageOptions配置檔案

3.圖片載入時候帶載入情況的監聽

方法:

 public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener) {

  ImageLoadingListener 用於監聽圖片的下載情況。

  具體實現:

雙擊程式碼複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

imageLoader.displayImage(imageUrl, imageView, options, newImageLoadingListener() {  

@Override

publicvoidonLoadingStarted() {  

//開始載入的時候執行  

}  

@Override

publicvoidonLoadingFailed(FailReason failReason) {        

//載入失敗的時候執行  

}   

@Override

publicvoidonLoadingComplete(Bitmap loadedImage) {  

//載入成功的時候執行  

}   

@Override

publicvoidonLoadingCancelled() {  

//載入取消的時候執行  

}});

4.圖片載入時候,帶監聽又帶載入進度條的情況呼叫:public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}具體實現:

雙擊程式碼複製

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

imageLoader.displayImage(imageUrl, imageView, options, newImageLoadingListener() {  

@Override

publicvoidonLoadingStarted() {  

//開始載入的時候執行  

}  

@Override

publicvoidonLoadingFailed(FailReason failReason) {        

//載入失敗的時候執行  

}      

@Override

publicvoidonLoadingComplete(Bitmap loadedImage) {  

//載入成功的時候執行  

}      

@Override

publicvoidonLoadingCancelled() {  

//載入取消的時候執行  

},newImageLoadingProgressListener() {        

@Override

publicvoidonProgressUpdate(String imageUri, View view, intcurrent,inttotal) {     

//在這裡更新 ProgressBar的進度資訊  

}  

});

四、注意事項1.上述提到的2個許可權必須加入,否則會出錯2.ImageLoaderConfiguration必須配置並且全域性化的初始化這個配置ImageLoader.getInstance().init(config);  否則也會出現錯誤提示3.ImageLoader是根據ImageViewheightwidth確定圖片的寬高。4.如果經常出現OOM(別人那邊看到的,覺得很有提的必要)減少配置之中執行緒池的大小,(.threadPoolSize).推薦1-5使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者        try.imageScaleType(ImageScaleType.EXACTLY)避免使用RoundedBitmapDisplayer.他會建立新的ARGB_8888格式的Bitmap物件;使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();


相關推薦

Universal-Image-Loader圖片非同步載入

這是 一個開源的Android關於下載顯示圖片的工具類,在這個下載包裡面jar檔案,用於我們匯入專案使用,具體使用方法在包裡面也含有。下面是一個例子: 雙擊程式碼複製 1 2 <uses-permissionandroid:name="android.pe

Android-Universal-Image-Loader 圖片非同步載入的使用(超詳細配置)

      這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。        可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用過程中

Android-Image-Loader 圖片非同步載入的使用超(詳細配置)

       這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。        可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用

Android載入圖片 Universal-Image-Loader圖片快取問題

        開發中大部分情況下我們需要快取圖片,用imageLoader兩步實現載入網路圖片後,快取到記憶體以及sd卡.再次讀取該圖片時先從記憶體找,有則直接載入,沒有則從sd卡找,再沒有則讀網路,這樣實現了三級快取. 1.初始化配置,ImageLoader是單例模式,

android--------Universal-Image-Loader圖片載入框架和結合LruCache快取圖片

本部落格包含包含Android-Universal-Image-Loader 網路圖片載入框架實現圖片載入和結合universal-image-loader與LruCache來自定義快取圖片,可以設定快取與不快取。 Android-Universal-Image-Load

使用 Android-Universal-Image-Loader 圖片載入框架,載入圖片

特點 多執行緒下載圖片,圖片可以來源於網路,檔案系統,專案資料夾assets中以及drawable中等 支援隨意的配置ImageLoader,例如執行緒池,圖片下載器,記憶體快取策略,硬碟快取策略,圖片顯示選項以及其他的一些配置 支援圖片

Android中使用Universal-Image-Loader圖片快取

ImageLoader 是最早開源的 Android 圖片快取庫, 強大的快取機制, 早期被廣泛 Android 應用使用, 至今仍然有很多 Android 開發者在使用。 GitHub地址:

Glide(圖片非同步載入快取)的方法介紹

文章來源:http://blog.csdn.net/u011733020/article/details/52319283  Glide 在開源中國上的介紹 Glide 的詳細介紹:請點這裡Glide 的下載地址:請點這裡 Glide :

Android 使用圖片異步載入框架Universal Image Loader的問題

loader mar fill splay con iss text blog option 使用的Jar包 問題: optionsm = new DisplayImageOptions.Builder() .displayer(new

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android開源元件載入網路圖片的優缺點比較

關於 Fresco Facebook最近推出了一款用於Android應用中展示圖片的強大圖片庫Fresco,它能夠從網路、本地儲存和本地資源中載入圖片。而且,為了節省資料和CPU,它擁有三級快取。 Fresco 是一個強大的圖片載入元件。 Fresco 中設計有一個叫做 image pipeline

universal-image-loader載入圖片,程式異常崩潰,圖片不在載入顯示問題

主要是發現universal-image-loader 用來在載入圖片的時候,如果程式異常崩潰了,那麼在自動重啟程式的時候,universal-image-loader會出現在快取讀取圖片的問題,解決方式為 new DisplayImageOptions.Builde

Android Universal-Image-Loader,Volley,Picasso、Fresco和Glide五大Android開源元件載入網路圖片的優缺點比較

關於 Fresco Facebook最近推出了一款用於Android應用中展示圖片的強大圖片庫Fresco,它能夠從網路、本地儲存和本地資源中載入圖片。而且,為了節省資料和CPU,它擁有三級快取。 Fresco 是一個強大的圖片載入元件。 Fresco 中設計有一個叫做 image pipeline

Android-Universal-Image-Loader 學習筆記(二)載入圖片原理

public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener pro

Universal-Image-Loader圖片載入流程原始碼分析

概述 Universal-Image-Loader是經典的圖片載入框架,雖然現在該專案不再維護,但對於初學者依舊是值得學習的開源專案之一,本文就該框架的載入圖片流程做簡要梳理,希望讀者有所收穫。 該文參考了【codeKK】 Android Universal

開源圖片載入庫universal-image-loader使用

ImageLoader | | - init(ImageLoaderConfiguration) | - isInited() | - displayImage(...) | - loadImage(...)

Android 開源框架Universal-Image-Loader完全解析(二)--- 圖片快取策略詳解

本篇文章繼續為大家介紹Universal-Image-Loader這個開源的圖片載入框架,介紹的是圖片快取策略方面的,如果大家對這個開源框架的使用還不瞭解,大家可以看看我之前寫的一篇文章Android 開源框架Universal-Image-Loader完全解析(一)---

Unity+NGUI打造網路圖片非同步載入與本地快取工具(一)

我們在移動端的開發中,非同步網路圖片載入用的非常的多,在unity當中雖然有AssetBundle的存在,一般是先載入好遊戲資源然後再進入場景,但是還有不少地方能夠用到非同步網路圖片的載入以及其快取機制。 我之前也寫過兩個版本的ios中的非同步網路圖片載入helper類,所

Android-Universal-Image-Loader的工具封裝

在Android開發中對圖片資源的處理已經司空見慣了,如果還是使用Android API提供的方法來處理圖片(尤其是網路圖片),不僅複雜工作量大,而且還達不到好的一個效果.所以最終選擇一些圖片處理框架,如Android-Universal-Image-Loader,pica

Universal-Image-Loader(android圖片快取)

詳細資料整理請加群284568173自行下載pdf 專案介紹: Android上最讓人頭疼的莫過於從網路獲取圖片、顯示、回收,任何一個環節有問題都可能直接OOM,這個專案或許能幫到你。Universal Image Loader for Android的目的是為了實現

Universal Image Loader使用方法

UIL aims to provide a powerful, flexible and highly customizable instrument for image loading, caching and displaying. It provides a lot