在使用這個架構的時候,我們必須要配置一個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對象;