#########################****Universal-Image-Loader#############
在安卓經(jīng)常要用到各種各樣的圖片加載框架,其中Universal-Image-Loader就是非常常用的一個(gè)昂勒,本人這個(gè)庫(kù)也是用的最多的焊唬。
GITHUB上面的下載地址就是在這個(gè)位置:
https://github.com/nostra13/Android-Universal-Image-Loader配猫。
Universal-Image-Loader有這幾個(gè)特點(diǎn):
1:安卓1.5以上都支持,所以基本所有版本都可以使用宦赠。
2:可以更具自己的需要設(shè)置(線程池的大小盔几,緩存策略,不同加載過(guò)程中的圖像)
3:可以監(jiān)聽(tīng)加載過(guò)程 做出自己的邏輯代碼
Universal-Image-Loader的使用過(guò)程:
加入需要的JAR包并且右擊ADD
配置權(quán)限(因?yàn)槲覀円獙?shí)現(xiàn)圖片的緩存和從網(wǎng)絡(luò)加載圖片)
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在全局Application里面配置并初始化:
ImageLoaderConfiguration config = new ImageLoaderConfiguration .Builder(context) .memoryCacheExtraOptions(480, 800) // 每個(gè)緩存文件的大小 .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) //設(shè)置緩存的詳細(xì)信息纯路,最好不要設(shè)置這個(gè) .threadPoolSize(3)//內(nèi)部維護(hù)的線程數(shù)的大小.threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory().memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) //你可以通過(guò)自己的內(nèi)存緩存實(shí)現(xiàn) .memoryCacheSize(2 * 1024 * 1024) .discCacheSize(50 * 1024 * 1024) .discCacheFileNameGenerator(new Md5FileNameGenerator())//將保存的時(shí)候的URI名稱(chēng)用*MD5 **加密 .tasksProcessingOrder(QueueProcessingType.LIFO)
//緩存策略的順序
.discCacheFileCount(100) //緩存的文件數(shù)量 **** .discCache(new UnlimitedDiscCache(cacheDir))//自定義緩存路徑 **** .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) .imageDownloader(new *BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超時(shí)時(shí)間 **** .writeDebugLogs() // Remove for release app **** .build();//開(kāi)始構(gòu)建 **
ImageLoader.getInstance().init(config);//初始化并配置*
- 在需要加載圖片的地方實(shí)例化:
**protected **ImageLoader **imageLoader **= ImageLoader.getInstance();
//注意內(nèi)不是單例的實(shí)現(xiàn)
根據(jù)需要對(duì)加載圖片時(shí)需要的參數(shù)進(jìn)行具體的配置
DisplayImageOptions options;**options **= *new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) //設(shè)置下載過(guò)程中的默認(rèn)圖片
*.showImageForEmptyUri(R.drawable.ic_launcher)*//**設(shè)置**URL為空時(shí)的默認(rèn)圖片**
*.showImageOnFail(R.drawable.ic_launcher) *//**設(shè)置圖片加載**/**解碼過(guò)程中錯(cuò)誤時(shí)候顯示的圖片**設(shè)置加載失敗時(shí)的默認(rèn)圖片**** *.cacheInMemory(**true**)*//**設(shè)置內(nèi)存緩存**** *.cacheOnDisc(**true**)*//**設(shè)置**SD卡緩存**
*.considerExifParams(**true**) *//**是否考慮**JPEG**圖像**EXIF**參數(shù)(旋轉(zhuǎn),翻轉(zhuǎn))**** *.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)*//**設(shè)置圖片以如何的編碼方式顯示 **** *.bitmapConfig(Bitmap.Config.***RGB_565***)*//**設(shè)置圖片的解碼類(lèi)型**// **** *.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)*//**設(shè)置圖片的解碼配置 **** *.delayBeforeLoading(int delayInMillis)*//int delayInMillis**為你設(shè)置的下載前的延遲時(shí)間****//**設(shè)置圖片加入緩存前寞忿,對(duì)**bitmap**進(jìn)行設(shè)置 **** **.preProcessor(BitmapProcessor preProcessor) **** *.resetViewBeforeLoading(**true**)*//**重復(fù)設(shè)置圖片時(shí)使用** **** *.displayer(**new **RoundedBitmapDisplayer(20))*//**是否設(shè)置為圓角驰唬,弧度為多少 **輕易不要使用** 會(huì)*創(chuàng)建新的ARGB_8888格式的Bitmap對(duì)象*** *.displayer(**new **FadeInBitmapDisplayer(100))*//**是否圖片加載好后漸入的動(dòng)畫(huà)時(shí)間 **** *.build();*//**構(gòu)建完成 *
在需要的房直接使用給控件設(shè)置圖片 并且可以設(shè)置監(jiān)聽(tīng)
imageLoader.displayImage(imageUrl, imageView, options, **new **ImageLoadingListener() { @Override **public void **onLoadingStarted() { *//開(kāi)始執(zhí)行加載的時(shí)候回調(diào)
**
- *} @Override **public void *onLoadingFailed(FailReason failReason) { //加載失敗的時(shí)候回調(diào)**** *} @Override **public void *onLoadingComplete(Bitmap loadedImage) { //加載完成的時(shí)候回調(diào)**** *} @Override public void onLoadingCancelled() { //加載取消的時(shí)候回調(diào) **** },new **ImageLoadingProgressListener() { @Override **public void **onProgressUpdate(String imageUri, View view, **int **current, **int *total) { //記載過(guò)程中的進(jìn)度信息**** *} });
注意:
上面給出的是通過(guò)網(wǎng)絡(luò)加載的情況,都是傳入一個(gè)url
值。其他的幾種加載數(shù)據(jù)的來(lái)源情況:
String **imageUri **= **"http://site.com/image.png"**; *// **從網(wǎng)絡(luò)** **** *String **imageUri **= **"file:///mnt/sdcard/image.png"**; *// **從**SD卡
**** *String **imageUri **= "content://media/external/audio/albumart/13"; *// **從內(nèi)容提供者**** *String **imageUri **= "assets://image.png"; *// 從AEESRT目錄下面
**** *String **imageUri **= *"drawable://" + R.drawable.image; //從drawable資源目錄下面
對(duì)于圖片大小的確定的話是根據(jù)控件的大小確定的 利用new WeakMemoryCache()替換.cacheInMemory()叫编;threadPoolSize數(shù)量減少辖佣;Bitmap.config.RGB_565代替ARGB_8888降低圖片質(zhì)量來(lái)減少內(nèi)存消耗;通過(guò)以上的方式來(lái)降低OOM的可能性搓逾。