Universal-Image-Loader解析(二)——DisplayImageOptions的詳細配置

文章轉自http://www.myext.cn/other/a_26932.html

在使用這個框架的時候,我們必須要配置一個DisplayImageOptions對象來作爲ImageLoader.getInstance().displayImage()中的參數,所以很有必要講解這個對象的配製方法。講解完了後其實這個框架我們就會了解的比較詳盡了。


1.默認的配置



DisplayImageOptions options = new DisplayImageOptions.Builder()
    .showImageOnLoading(R.drawable.ic_stub) // resource or drawable
    .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
    .showImageOnFail(R.drawable.ic_error) // resource or drawable
    .resetViewBeforeLoading(false)  // default
    .delayBeforeLoading(1000)
    .cacheInMemory(false) // default
    .cacheOnDisk(false) // default
    .preProcessor(...)
    .postProcessor(...)
    .extraForDownloader(...)
    .considerExifParams(false) // default
    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
    .bitmapConfig(Bitmap.Config.ARGB_8888) // default
    .decodingOptions(...)
    .displayer(new SimpleBitmapDisplayer()) // default
    .handler(new Handler()) // default
    .build();


 


example:



    /**
     * 顯示圖片的所有配置
     * @return
     */
    private DisplayImageOptions getWholeOptions() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()  
        .showImageOnLoading(R.drawable.loading) //設置圖片在下載期間顯示的圖片  
        .showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri爲空或是錯誤的時候顯示的圖片  
        .showImageOnFail(R.drawable.error)  //設置圖片加載/解碼過程中錯誤時候顯示的圖片
        .cacheInMemory(true)//設置下載的圖片是否緩存在內存中  
        .cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中  
        .considerExifParams(true)  //是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//設置圖片以如何的編碼方式顯示  
        .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型
        //.decodingOptions(BitmapFactory.Options decodingOptions)//設置圖片的解碼配置  
        .delayBeforeLoading(0)//int delayInMillis爲你設置的下載前的延遲時間
        //設置圖片加入緩存前,對bitmap進行設置  
        //.preProcessor(BitmapProcessor preProcessor)  
        .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位  
        .displayer(new RoundedBitmapDisplayer(20))//不推薦用!!!!是否設置爲圓角,弧度爲多少  
        .displayer(new FadeInBitmapDisplayer(100))//是否圖片加載好後漸入的動畫時間,可能會出現閃動
        .build();//構建完成
        
        return options;
    }


 


2.一般常用的配置



    
    /**
     * 設置常用的設置項
     * @return
     */
    private DisplayImageOptions getSimpleOptions() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()  
        .showImageOnLoading(R.drawable.loading) //設置圖片在下載期間顯示的圖片  
        .showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri爲空或是錯誤的時候顯示的圖片  
        .showImageOnFail(R.drawable.error)  //設置圖片加載/解碼過程中錯誤時候顯示的圖片
        .cacheInMemory(true)//設置下載的圖片是否緩存在內存中  
        .cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中  
        .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//設置圖片以如何的編碼方式顯示  
        .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型
        .build();//構建完成
        return options;
    }


 


注意:這裏面的參數當然也是可以隨意修改的,根據項目需要再定!


 


幾點說明:


1).imageScaleType(ImageScaleType imageScaleType)  //設置圖片的縮放方式,如:


.imageScaleType(ImageScaleType.IN_SAMPLE_INT)

其中,mageScaleType的選擇值:
              EXACTLY :圖像將完全按比例縮小的目標大小
              EXACTLY_STRETCHED:圖片會縮放到目標大小完全
              IN_SAMPLE_INT:圖像將被二次採樣的整數倍
              IN_SAMPLE_POWER_OF_2:圖片將降低2倍,直到下一減少步驟,使圖像更小的目標大小
              NONE:圖片不會調整


2).displayer(BitmapDisplayer displayer)  // 設置圖片的顯示方式,如:


.displayer(new FadeInBitmapDisplayer(100))

其中,displayer的選擇值:


     RoundedBitmapDisplayer(int roundPixels)設置圓角圖片,不推薦!!!
              FakeBitmapDisplayer()這個類什麼都沒做
              FadeInBitmapDisplayer(int durationMillis)設置圖片漸顯的時間
     SimpleBitmapDisplayer()正常顯示一張圖片


 


3.避免OOM


.bitmapConfig(Bitmap.Config.RGB_565) //默認是ARGB_8888,使用RGB_565會比使用ARGB_8888少消耗2倍的內


使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT) imageScaleType(ImageScaleType.EXACTLY)


避免使用.displayer(new RoundedBitmapDisplayer(20)) //他會創建新的ARGB_8888格式的Bitmap對象;


 調用denyCacheImageMultipleSizesInMemory()強制UIL在內存中不能存儲內容相同但大小不同的圖像。由於完整大小的圖片會存儲在磁盤緩存中,後面當圖片加載進入內存,他們就會縮小到ImageView的大小(圖片要顯示的尺寸),然而在某些情況下,相同的圖像第一次顯示在一個小的View中,然後又需要在一個大的View中顯示。同時,兩個不同大小的相同內容的圖片就會被將被存儲在內存中。這是默認的操作。denyCacheImageMultipleSizesInMemory()指令確保刪除前一個加載的圖像緩存的內存的大小


Activity代碼:


 


參考自:


http://blog.csdn.net/xiaanming/article/details/26810303


http://blog.csdn.net/vipzjyno1/article/details/23206387

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章