圖片加載框架---UniversalImageLoader使用(一)


 前言  

      UniversalImageLoader是用於加載圖片的一個開源項目,在其項目介紹中是這么寫的,

  • 支持多線程圖片加載
  • 提供豐富的細節配置,比如線程池大小,HTPP請求項,內存和磁盤緩存,圖片顯示時的參數配置等等;
  • 提供雙緩存
  • 支持加載過程的監聽;
  • 提供圖片的個性化顯示配置接口;
  • Widget支持(這個,個人覺得沒必要寫進來,不過尊重原文)

其他類似的項目也有很多,但這個作為github上著名的開源項目被廣泛使用。第三方的包雖然好用省力,可以有效避免重復造輪子,但是卻隱藏了一些開發上的細節,如果不關注其內部實現,那么將不利於開發人員掌握核心技術,當然也談不上更好的使用它,計划分析項目的集成使用和低層實現。

正文

     clone 項目就不講了,拿到代碼后有兩個主要項目,一份是UniversalImageLoader 的源碼,一份是sample,

     加載圖片之前,先要做初始化配置,這個類似很多游戲引擎使用前要做一下初始化,其實只做了一件事,實例化一個全局的ImageLoader對象,同時傳入圖片加載緩存的配置,ImageLoaderConfiguration封裝了基本的配置信息,比如加載圖片事用的線程池大小,線程的優先級,內存緩存大小,是否支持同一圖片的多尺寸緩存(默認是支持的,可以手動關閉),還有緩存的命名規則等等.這基本也就是幾行代碼,下面這張圖里有實例化和初始化的過程。

     關於這個實例化,是線程安全,筆者忽略第二層判斷,如果A,B線程同時執行if(instance==null),A,B都滿足條件進入,此時,其中一個換的鎖,另一個等待,還需要再次判斷instance==null(這是必要的,否則可能使得,再次實例化)這樣一個單例就正常初始化了。

   

UniversalImageLoader

     

     配置完后,就可以開始使用了,通過ImageLoader的displayImage()綁定一個圖片和ImageView,該方法有四個重載版本,傳的參數比較多,這也印證了該項目提供每個圖片單獨的顯示配置這一說法。其中參數最全的是:

displayImage(String uri, ImageView imageView, DisplayImageOptions options, ImageLoadingListener listener);

另外三個其實就是減少其中幾個參數用默認的值而已。

String uri, 圖片鏈接沒什么疑問,

ImageView imageView, 圖片載體控件,也沒什么好說,

比較重要的是后面兩個,DisplayImageOptions options,圖片的參數配置對象,

options = new DisplayImageOptions.Builder() 
.showStubImage(R.drawable.stub_image) 
.showImageForEmptyUri(R.drawable.image_for_empty_url) 
.cacheInMemory() 
.cacheOnDisc() 
.build();

     來看看都有什么信息可以配置的,

第一個是圖片加載過程中顯示的圖片,比如“菊花”圈熱烈的笑臉

第二個是圖片加載失敗時用的的圖片,

第三個允許內存緩存,第四個允許磁盤緩存。

除此之外還有兩個,imageScaleType(ImageScaleType imageScaleType)圖片縮放類型,displayer(BitmapDisplayer displayer)bitmap顯示控制層,可以在顯示圖片前對Bitmap簡單處理一下,這兩個不是一定要設定,應為他們都有默認值。

最后一個參數ImageLoadingListener listener當然是監聽過程的回調接口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM