Android-Universal-Image-Loader 的使用說明

這個圖片異步載入并緩存的類已經被非常多開發人員所使用,是最經常使用的幾個開源庫之中的一個,主流的應用,隨便反編譯幾個火的項目,都能夠見到它的身影。

? ? ? ?但是有的人并不知道怎樣去使用這庫怎樣進行配置,網上查到的信息對于剛接觸的人來說可能太少了,以下我就把我使用過程中所知道的寫了下來,希望能夠幫助自己和別人更深入了解這個庫的使用和配置。?

? ? ? ? GITHUB上的下載路徑為:https://github.com/nostra13/Android-Universal-Image-Loader?,下載最新的庫文件,而且導入到項目的LIB下便能夠使用。

? ? ? ??該庫以及DEMO本地下載鏈接:下載地址

一、介紹


?Android-Universal-Image-Loader是一個開源的UI組件程序,該項目的目的是提供一個可反復使用的儀器為異步圖像載入,緩存和顯示。所以。假設你的程序里須要這個功能的話,那么最好還是試試它。由于已經封裝好了一些類和方法。

我們 能夠直接拿來用了。

而不用反復去寫了。

事實上,寫一個這方面的程序還是比較麻煩的,要考慮多線程,緩存。內存溢出等非常多方面。但是,你也能夠參考這個樣例來自己寫出更好的程序。在此為大家介紹一下:



二、特點


多線程的圖像載入
的可能性的寬調諧對ImageLoader的配置(線程池的大小,HTTP選項,內存和光盤快速緩存,顯示圖像。以及其它)
的圖像的可能性中的緩存存儲器和/或設備的文件器系統(或SD卡)
能夠“聽”載入過程中
可自己定義每一個顯示的圖像調用分隔的選項
Widget支持
Android 1.5以上支持
簡單描寫敘述一下這個項目的結構:每一個圖片的載入和顯示任務都運行在獨立的線程中,除非這個圖片緩存在內存中。這樣的情況下圖片會馬上顯示。假設須要的圖片緩存在本地,他們會開啟一個獨立的線程隊列。

假設在緩存中沒有正確的圖片。任務線程會從線程池中獲取。因此,快速顯示緩存圖片時不會有明顯的障礙。(別人那邊借鑒的這段)

流程圖:


?

三、用法

? 這是 一個開源的Android關于下載顯示圖片的工具類。在這個下載包里面jar文件,用于我們導入項目使用,詳細用法在包里面也含有。

以下是一個樣例:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <uses-permission?android:name="android.permission.INTERNET"?/>??
  2. <uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"?/>??

由于是使用過程中會圖片獲取要通過網絡。而且有緩存設置。所以這2個權限必須要有。


非常多人想知道怎樣設置緩存的文件夾,能夠通過以下方法:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. File?cacheDir?=?StorageUtils.getOwnCacheDirectory(getApplicationContext(),?"imageloader/Cache");??

//這個是你希望的緩存文件的文件夾:imageloader/Cache

之后在ImageLoaderConfiguration的配置文件里通過設置

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. .discCache(new?UnlimitedDiscCache(cacheDir))//自己定義緩存路徑??

方法來設置該應用的圖片緩存路徑。


以下我們就來開始看怎樣使用這個圖片異步載入庫把:


一.

? ? ? ? 先要配置ImageLoaderConfiguration這個類實現全局ImageLoader的實現情況。

能夠選擇在Application中初始化設置該類。

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ImageLoaderConfiguration?config?=?new?ImageLoaderConfiguration??
  2. ????.Builder(context)??
  3. ????.memoryCacheExtraOptions(480,?800)?//?max?width,?max?height,即保存的每一個緩存文件的最大長寬??
  4. ????.discCacheExtraOptions(480,?800,?CompressFormat.JPEG,?75,?null)?//?Can?slow?ImageLoader,?use?it?carefully?(Better?don't?use?it)/設置緩存的詳細信息,最好不要設置這個??
  5. ????.threadPoolSize(3)//線程池內載入的數量??
  6. ????.threadPriority(Thread.NORM_PRIORITY?-?2)??
  7. ????.denyCacheImageMultipleSizesInMemory()??
  8. ????.memoryCache(new?UsingFreqLimitedMemoryCache(2?*?1024?*?1024))?//?You?can?pass?your?own?memory?cache?implementation/你能夠通過自己的內存緩存實現??
  9. ????.memoryCacheSize(2?*?1024?*?1024)????
  10. ????.discCacheSize(50?*?1024?*?1024)????
  11. ????.discCacheFileNameGenerator(new?Md5FileNameGenerator())//將保存的時候的URI名稱用MD5?加密??
  12. ????.tasksProcessingOrder(QueueProcessingType.LIFO)??
  13. ????.discCacheFileCount(100)?//緩存的文件數量??
  14. ????.discCache(new?UnlimitedDiscCache(cacheDir))//自己定義緩存路徑??
  15. ????.defaultDisplayImageOptions(DisplayImageOptions.createSimple())??
  16. ????.imageDownloader(new?BaseImageDownloader(context,?5?*?1000,?30?*?1000))?//?connectTimeout?(5?s),?readTimeout?(30?s)超時時間??
  17. ????.writeDebugLogs()?//?Remove?for?release?app??
  18. ????.build();//開始構建??
  19. ????//?Initialize?ImageLoader?with?configuration.??

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


配置好ImageLoaderConfiguration后。調用以下方法來實現初始化:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ImageLoader.getInstance().init(config);//全局初始化此配置??

注:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是將緩存下來的文件以什么方式命名

? ? ? ? ? 里面能夠調用的方法有 ?1.new Md5FileNameGenerator() //使用MD5對UIL進行加密命名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.new?HashCodeFileNameGenerator()//使用HASHCODE對UIL進行加密命名

二.

? ? ? ? 使用ImageLoader進行圖片載入的時候,先要實例化ImageLoader,調用以下方法進行實例化。在每一個布局里面都要實例化后再使用。

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. protected?ImageLoader?imageLoader?=?ImageLoader.getInstance();??

之后進行顯示的圖片的各種格式DisplayImageOptions?的設置:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. DisplayImageOptions?options;??
  2. options?=?new?DisplayImageOptions.Builder()??
  3. ?.showImageOnLoading(R.drawable.ic_launcher)?//設置圖片在下載期間顯示的圖片??
  4. ?.showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri為空或是錯誤的時候顯示的圖片??
  5. .showImageOnFail(R.drawable.ic_launcher)??//設置圖片載入/解碼過程中錯誤時候顯示的圖片
  6. .cacheInMemory(true)//設置下載的圖片是否緩存在內存中??
  7. .cacheOnDisc(true)//設置下載的圖片是否緩存在SD卡中??
  8. .considerExifParams(true) ?//是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
  9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//設置圖片以怎樣的編碼方式顯示??
  10. .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型//??
  11. .decodingOptions(android.graphics.BitmapFactory.Options?decodingOptions)//設置圖片的解碼配置??
  12. //.delayBeforeLoading(int?delayInMillis)//int?delayInMillis為你設置的下載前的延遲時間
  13. //設置圖片增加緩存前,對bitmap進行設置??
  14. //.preProcessor(BitmapProcessor?preProcessor)??
  15. .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位??
  16. .displayer(new?RoundedBitmapDisplayer(20))//是否設置為圓角,弧度為多少??
  17. .displayer(new?FadeInBitmapDisplayer(100))//是否圖片載入好后漸入的動畫時間??
  18. .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)?{}

? 詳細實現:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. ImageLoader.getInstance().displayImage(imageUrl,?imageView);?//?imageUrl代表圖片的URL地址,imageView代表承載圖片的IMAGEVIEW控件??

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

? 方法:

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

? 詳細實現:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  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?用于監聽圖片的下載情況。

? 詳細實現:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. imageLoader.displayImage(imageUrl,?imageView,?options,?new?ImageLoadingListener()?{??
  2. ????@Override??
  3. ????public?void?onLoadingStarted()?{??
  4. ???????//開始載入的時候運行??
  5. ????}??
  6. ????@Override??
  7. ????public?void?onLoadingFailed(FailReason?failReason)?{????????
  8. ???????//載入失敗的時候運行??
  9. ????}???
  10. ????@Override???
  11. ????public?void?onLoadingComplete(Bitmap?loadedImage)?{??
  12. ???????//載入成功的時候運行??
  13. ????}???
  14. ????@Override???
  15. ????public?void?onLoadingCancelled()?{??
  16. ???????//載入取消的時候運行??
  17. ??
  18. ????}});??


4.圖片載入時候。帶監聽又帶載入進度條的情況
? ?調用:
public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
? ? ? ? ? ? ? ? ? ? ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}
? ?詳細實現:

[java]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. imageLoader.displayImage(imageUrl,?imageView,?options,?new?ImageLoadingListener()?{??
  2. ????@Override??
  3. ????public?void?onLoadingStarted()?{??
  4. ???????//開始載入的時候運行??
  5. ????}??
  6. ????@Override??
  7. ????public?void?onLoadingFailed(FailReason?failReason)?{????????
  8. ???????//載入失敗的時候運行??
  9. ????}??????
  10. ????@Override??????
  11. ????public?void?onLoadingComplete(Bitmap?loadedImage)?{??
  12. ???????//載入成功的時候運行??
  13. ????}??????
  14. ????@Override??????
  15. ????public?void?onLoadingCancelled()?{??
  16. ???????//載入取消的時候運行??
  17. ????},new?ImageLoadingProgressListener()?{????????
  18. ??????@Override??
  19. ??????public?void?onProgressUpdate(String?imageUri,?View?view,?int?current,int?total)?{?????
  20. ??????//在這里更新?ProgressBar的進度信息??
  21. ??????}??
  22. ????});??


四、注意事項
? 1.上述提到的2個權限必須增加,否則會出錯
? 2.ImageLoaderConfiguration必須配置而且全局化的初始化這個配置ImageLoader.getInstance().init(config); ?否則也會出現錯誤提示
? 3.ImageLoader是依據ImageView的height,width確定圖片的寬高。
? 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();

以下有人問到怎樣載入本地圖片什么的。之后把那位親的回答補充上來,謝謝各位大大提出的不足(那時候用的時候僅僅想到用網絡圖片了,所以也沒考慮這么多)。

  1. String?imageUri?=?"http://site.com/image.png";?//?from?Web??
  2. String?imageUri?=?"file:///mnt/sdcard/image.png";?//?from?SD?card??
  3. String?imageUri?=?"content://media/external/audio/albumart/13";?//?from?content?provider??
  4. String?imageUri?=?"assets://image.png";?//?from?assets??
  5. String?imageUri?=?"drawable://"?+?R.drawable.image;?//?from?drawables?(only?images,?non-9patch) ?


? ? 大致就講到這里。可能有的地方不足歡迎提出。希望大家能夠更加easy入手、使用這個庫。


==========================================================================================

歡迎增加我們的技術交流群:
Android群:?66756039
JavaEE群: ?361579846?


轉載于:https://www.cnblogs.com/yutingliuyl/p/6920742.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

faster rcnn end2end 訓練與測試

除了前面講過的rpn與fast rcnn交替訓練外&#xff0c;faster rcnn還提供了一種近乎聯合的訓練&#xff0c;姑且稱為end2end訓練。 根據論文所講&#xff0c;end2end的訓練一氣呵成&#xff0c;對于前向傳播&#xff0c;rpn可以作為預設的網絡提供proposal.而在后向傳播中&…

jquery ui動態切換主題的一種實現方式

這兩天看coreservlets上的jQuery教程&#xff0c;雖然比較老了&#xff0c;不過講得還是不錯。最后一部分講jQuery ui 主題切換&#xff0c;用他介紹的方法實現不了。于是自己修改了下&#xff0c;可以了。代碼如下&#xff1a;html部分&#xff1a;<fieldset class"ui…

[學習總結]7、Android AsyncTask完全解析,帶你從源碼的角度徹底理解

我們都知道&#xff0c;Android UI是線程不安全的&#xff0c;如果想要在子線程里進行UI操作&#xff0c;就需要借助Android的異步消息處理機制。之前我也寫過了一篇文章從源碼層面分析了Android的異步消息處理機制&#xff0c;感興趣的朋友可以參考 Android Handler、Message完…

python字頻統計軟件_python結巴分詞以及詞頻統計實例

python結巴分詞以及詞頻統計實例發布時間&#xff1a;2018-03-20 14:52,瀏覽次數&#xff1a;773, 標簽&#xff1a;python# codingutf-8Created on 2018年3月19日author: chenkai結巴分詞支持三種分詞模式&#xff1a;精確模式: 試圖將句子最精確地切開&#xff0c;適合文…

html從入門到賣電腦(三)

CSS3中和動畫有關的屬性有三個 transform、 transition 和 animation。下面來一一說明: transform 從字面來看transform的釋義為改變&#xff0c;使…變形&#xff1b;轉換 。這里我們就可以理解為變形。那都能怎么變呢&#xff1f; none 表示不進行變換&#xff1b; rotat…

visual studio 2015安裝 無法啟動程序,因為計算機丟失D3DCOMPILER_47.dll 的解決方法

對于題目中的解決方法&#xff0c;我查到了微軟提供的一個方案&#xff1a;https://support.microsoft.com/en-us/help/4019990/update-for-the-d3dcompiler-47-dll-component-on-windows 進入如下頁面&#xff1a;http://www.catalog.update.microsoft.com/Search.aspx?qKB4…

UI1_UIView層操作

// // ViewController.m // UI1_UIView層操作 // // Created by zhangxueming on 15/7/1. // Copyright (c) 2015年 zhangxueming. All rights reserved. //#import "ViewController.h"interface ViewController ()endimplementation ViewController- (void)view…

JavaScript Patterns 1 Introduction

1.1 Pattern "theme of recurring events or objects… it can be a template or model which can be used to generate things" (http://en.wikipedia.org/wiki/Pattern). ? Design patterns - Elements of Reusable Object-Oriented Software. ? Coding patte…

基于像素聚類的分割方法基于slic的方法_博士論文摘要 | 張榮春:數碼影像與TLS點云數據融合提取地質結構面方法研究...

《測繪學報》構建與學術的橋梁 拉近與權威的距離數碼影像與TLS點云數據融合提取地質結構面方法研究張榮春1,21.南京郵電大學地理與生物信息學院, 江蘇 南京 210023;2.河海大學地球科學與工程學院, 江蘇 南京 211100收稿日期&#xff1a;2019-03-27基金項目&#xff1a;國家自然…

制作IOS 后臺極光推送時,遇到的小問題

推送廣義上分為兩種&#xff0c; 一種是 程序在前臺的時候&#xff0c;不想在任務欄里面顯示通知&#xff0c;直接在app中進行某種操作。這個叫做自定義消息。這個是在前臺時&#xff0c;app與極光后臺建立了一個長鏈接。 另一種是 程序處于前、后臺 或者殺死狀態的時候&…

Visual Studio 2008 環境變量的配置(參考設置VS2010)

本文轉載自&#xff1a;http://blog.csdn.net/tracyliang223/article/details/21539361COPY FROM&#xff1a;http://www.cnblogs.com/waterlin/archive/2011/10/31/2230341.html 在調試 Visual Studio 2008 程序時&#xff0c;經常有一些動態鏈接庫&#xff08;即 dll 文件&am…

Linq 中 Any與All

昨天突然看到之前寫的一個積累文檔&#xff0c;其中文檔中有一個Linq Any和All的注意事項&#xff1a;注意Any 和 All var list new List<int>(); var aa list.All(n > n > 1); var bb list.Any(n > n > 1); // aa: true bb: false其中List是一個元…

jaxb轉xml空值雙標簽_單品運營思維:標簽-詞路-聚焦-直搜-超直

非標品標簽思維&#xff1a;針對非標品 主要是2.0為主的打法根據搜索入池的關鍵詞&#xff0c;有什么詞做什么詞。有個細節&#xff1a;不一定進什么詞做什么詞&#xff0c;這個維度當中加入3.0的思維3.0入手 轉2.0再切3.0(檢測詞路健康度&#xff0c;非嚴格意義估算單量)舉例&…

如何在PFSense中設置故障轉移和負載平衡

故障轉移是一種備份操作模式&#xff0c;僅在主系統由于系統故障或任何計劃停機時間而變得不可用時&#xff0c;系統組件&#xff08;如網絡&#xff09;的操作才由輔助系統承擔。在本教程中&#xff0c;我們將看到如何設置故障轉移和負載平衡&#xff0c;以使pfSense能夠將流量…

圖像金字塔總結

本文轉載自&#xff1a; http://blog.csdn.net/dcrmg/article/details/52561656 一、 圖像金字塔 圖像金字塔是一種以多分辨率來解釋圖像的結構&#xff0c;通過對原始圖像進行多尺度像素采樣的方式&#xff0c;生成N個不同分辨率的圖像。把具有最高級別分辨率的圖像放在底部…

表單的get和post使用情景

GET和POST兩種方法都是將數據送到服務器&#xff0c;但你該用哪一種呢&#xff1f;HTTP標準包含這兩種方法是為了達到不同的目的。POST用于創建資源&#xff0c;資源的內容會被編入HTTP請示的內容中。例如&#xff0c;處理訂貨表單、在數據庫中加入新數據行等。 當請求無副作用…

什么叫做羅列式_項目起盤的時候,如何確定自己該做什么社群?

這是祁杰『社群日記』第48篇持續日更&#xff0c;做最懂社群的營銷咨詢人很多人手上有資源&#xff0c;準備起盤項目的時候&#xff0c;總會思考一個問題&#xff1a;我能做什么樣的社群&#xff1f;今天我們從用戶需求出發&#xff0c;拆解一下哪些社群是能夠確切地滿足用戶的…

C++ exit 與 return 淺析

【摘要】 本文從代碼形式。經常使用方式&#xff0c;相關概念&#xff0c;調用關系和比較分析&#xff0c;這5個維度淺析 exit 與 return 在C的同樣點與差別。【常見形式】 exit(0)&#xff1a; 正常執行程序并退出程序。 exit(1)&#xff1a; 非正常執行導致退出程序&…

Feature Pyramid Networks for Object Detection 總結

最近在閱讀FPN for object detection,看了網上的很多資料&#xff0c;有些認識是有問題的&#xff0c;當然有些很有價值。下面我自己總結了一下&#xff0c;以供參考。 1. FPN解決了什么問題&#xff1f; 答&#xff1a; 在以往的faster rcnn進行目標檢測時&#xff0c;無論…

最近工作

最近的工作忙且亂&#xff0c;以至于&#xff0c;我第天早晨早早起來到晚上11點多才能回到家。今天早晨寫代碼的時候腰突然猛疼&#xff0c;疼的我直叫喚。躺在床上半天起不來。 最近每天的工作要計劃一下了&#xff0c;不能客戶說干嘛就干嘛&#xff0c;這樣累壞了自己&#x…