這裡隻做使用方法,其它不做過多介紹。
一、下載下傳類庫導入到LIB。
GITHUB上的下載下傳路徑為:https://github.com/nostra13/Android-Universal-Image-Loader ,下載下傳最新的庫檔案,并且導入到項目的LIB下便可以使用。
二、AndroidManifest.xml中配置網絡和檔案讀寫的權限。
由于使用過程中圖檔擷取需要使用網絡,并且有緩存設定,是以需要網絡和檔案讀寫的權限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
三、在Application中初始化配置項。
//ImageLoader配置方法
public static void initImageLoader(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(context)
.memoryCacheExtraOptions(480, 800) // max width, max height,即儲存的每個緩存檔案的最大長寬
.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/設定緩存的詳細資訊,最好不要設定這個
.threadPoolSize(3)//線程池内加載的數量
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通過自己的記憶體緩存實作
.memoryCacheSize(2 * 1024 * 1024)
.discCacheSize(50 * 1024 * 1024)
.discCacheFileNameGenerator(new Md5FileNameGenerator())//将儲存的時候的URI名稱用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.discCacheFileCount(100) //緩存的檔案數量
.discCache(new UnlimitedDiscCache(cacheDir))//自定義緩存路徑
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)逾時時間
.writeDebugLogs() // Remove for release app
.build();//開始建構
ImageLoader.getInstance().init(config);
}
在onCreate()方法中調用initImageLoader(getApplicationContext());
四、執行個體化ImageLoader及顯示圖檔設定。
使用ImageLoader進行圖檔加載的時候,先要執行個體化ImageLoader,調用以下方法進行執行個體化,在每個布局裡面都要執行個體化後再使用。
protected ImageLoader imageLoader = ImageLoader.getInstance();
進行顯示的圖檔的各種格式DisplayImageOptions 的設定:
DisplayImageOptions options;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_launcher) //設定圖檔在下載下傳期間顯示的圖檔
.showImageForEmptyUri(R.drawable.ic_launcher)//設定圖檔Uri為空或是錯誤的時候顯示的圖檔
.showImageOnFail(R.drawable.ic_launcher) //設定圖檔加載/解碼過程中錯誤時候顯示的圖檔
.cacheInMemory(true)//設定下載下傳的圖檔是否緩存在記憶體中
.cacheOnDisc(true)//設定下載下傳的圖檔是否緩存在SD卡中
.considerExifParams(true) //是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//設定圖檔以如何的編碼方式顯示
.bitmapConfig(Bitmap.Config.RGB_565)//設定圖檔的解碼類型//
.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//設定圖檔的解碼配置
//.delayBeforeLoading(int delayInMillis)//int delayInMillis為你設定的下載下傳前的延遲時間
//設定圖檔加入緩存前,對bitmap進行設定
//.preProcessor(BitmapProcessor preProcessor)
.resetViewBeforeLoading(true)//設定圖檔在下載下傳前是否重置,複位
.displayer(new RoundedBitmapDisplayer(20))//是否設定為圓角,弧度為多少
.displayer(new FadeInBitmapDisplayer(100))//是否圖檔加載好後漸入的動畫時間
.build();//建構完成
以上配置配置可按實際需要修改,
以上配置中:
1).imageScaleType(ImageScaleType imageScaleType) 是設定 圖檔的縮放方式縮放類型mageScaleType:
EXACTLY :圖像将完全按比例縮小的目标大小
EXACTLY_STRETCHED:圖檔會縮放到目标大小完全
IN_SAMPLE_INT:圖像将被二次采樣的整數倍
IN_SAMPLE_POWER_OF_2:圖檔将降低2倍,直到下一減少步驟,使圖像更小的目标大小
NONE:圖檔不會調整
2).displayer(BitmapDisplayer displayer) 是設定圖檔的顯示方式顯示方式displayer:
RoundedBitmapDisplayer(int roundPixels)設定圓角圖檔
FakeBitmapDisplayer()這個類什麼都沒做
FadeInBitmapDisplayer(int durationMillis)設定圖檔漸顯的時間
SimpleBitmapDisplayer()正常顯示一張圖檔
五、按需求調用顯示圖檔
1.加載預設配置圖檔:ImageLoader.getInstance().displayImage(imageUrl, imageView); // imageUrl代表圖檔的URL位址,imageView代表承載圖檔的IMAGEVIEW控件
也可以在application中配置ImageLoaderConfiguration時配置統一的顯示配置:config..defaultDisplayImageOptions(options);config為ImageLoaderConfiguration,options為DisplayImageOptions。
2.加載自定義配置的一個圖檔:ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl代表圖檔的URL位址,imageView代表承載圖檔的IMAGEVIEW控件 , options代表DisplayImageOptions配置檔案
3.圖檔加載時候帶加載情況的監聽
imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted() {
//開始加載的時候執行
}
@Override
public void onLoadingFailed(FailReason failReason) {
//加載失敗的時候執行
}
@Override
public void onLoadingComplete(Bitmap loadedImage) {
//加載成功的時候執行
}
@Override
public void onLoadingCancelled() {
//加載取消的時候執行
}});
4.圖檔加載時候,帶監聽又帶加載進度條的情況
imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted() {
//開始加載的時候執行
}
@Override
public void onLoadingFailed(FailReason failReason) {
//加載失敗的時候執行
}
@Override
public void onLoadingComplete(Bitmap loadedImage) {
//加載成功的時候執行
}
@Override
public void onLoadingCancelled() {
//加載取消的時候執行
},new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,int total) {
//在這裡更新 ProgressBar的進度資訊
}
});
六、注意事項
1、權限必須加入
2、ImageLoaderConfiguration必須配置并且全局化的初始化這個配置ImageLoader.getInstance().init(config);
3、ImageLoader是根據ImageView的height,width确定圖檔的寬高。
4、如果經常出現OOM(别人那邊看到的,覺得很有提的必要)
①減少配置之中線程池的大小,(.threadPoolSize).推薦1-5;
②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
④避免使用RoundedBitmapDisplayer.他會建立新的ARGB_8888格式的Bitmap對象;
⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
以上内容有部分來源于:http://blog.csdn.net/vipzjyno1/article/details/23206387