文章轉自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