public class ImageLoaderManager {
private static final int THREAD_COUNT=4;//開啓線程的數量
private static final int PRIORITY = 2;//優先級
private static final int MEMORY_CACHE_SIZE = 2 * 1024 * 1024;
private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
private static final int CONNECTION_TIME_OUT = 5 * 1000;
private static final int READ_TIME_OUT = 30 * 1000;//讀超時時間
private static ImageLoaderManager mInstance = null;
private static ImageLoader mLoader = null;
//獲取ImageLoaderManager 的單例模式
public static ImageLoaderManager getInstance(Context context) {
if (mInstance == null) {
synchronized (ImageLoaderManager.class) {
if (mInstance == null) {
mInstance = new ImageLoaderManager(context);
}
}
}
return mInstance;
}
//構造私有方法 在創建ImageLoaderManager 的時候,就配置好相關的設置
private ImageLoaderManager(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(THREAD_COUNT)//設置線程的數量
.threadPriority(Thread.NORM_PRIORITY-PRIORITY)//設置優先級
.denyCacheImageMultipleSizesInMemory()//設置加載的圖片只有一種格式,默認時多種格式
.memoryCache(new WeakMemoryCache())//設置弱引用,當內存不足時,會回收圖片
.diskCacheSize(DISK_CACHE_SIZE)// 設置硬盤的緩存大小
//將保存的時候的URI名稱用MD5加密 設置硬盤緩存文件名生成規範
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
// 設置圖片加載和顯示隊列處理的類型 默認爲QueueProcessingType.FIFO
// 注:如果設置了taskExecutor或者taskExecutorForCachedImages 此設置無效
.tasksProcessingOrder(QueueProcessingType.LIFO)
//設置圖片默認的顯示選項
.defaultDisplayImageOptions(getDefaultOptions())
// 設置圖片下載器
// 默認爲 DefaultConfigurationFactory.createBitmapDisplayer()
.imageDownloader(new BaseImageDownloader(context,CONNECTION_TIME_OUT,READ_TIME_OUT))
//打印DebugLogs
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(config);
mLoader = ImageLoader.getInstance();
}
/**
* 默認的圖片顯示Options ,可設置圖片的緩存策略,編解碼方式等,非常重要
* @return
*/
private DisplayImageOptions getDefaultOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.default_user_avatar)//當URL爲空時顯示的圖片
.showImageOnFail(R.drawable.default_user_avatar)//當圖片加載失敗時,顯示的圖片
.cacheInMemory(true)//設置下載的圖片是否緩存在內存中,重要,否則圖片不會緩存到內存中
.cacheOnDisk(true)//設置下載的圖片是否緩存到SD卡中,重要哦,否則圖片不會緩存到硬盤中
.considerExifParams(true)//是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//設置圖片以如何的編碼方式顯示
.bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型
.decodingOptions(new BitmapFactory.Options())//設置圖片的解碼配置
.resetViewBeforeLoading(true)//設置圖片在下載前是否需要重置,復位
.build();
return options;
//還可以設置其他的相關的屬性
// 設置圖片加載時的默認圖片
// .showImageOnLoading(R.drawable.ic_chat_def_pic)
// 設置延遲部分時間纔開始加載 默認爲0
// .delayBeforeLoading(100)
// 設置添加到內存緩存
// 默認爲false
// 設置選項的圖像解碼
// .decodingOptions(new Options())
// 設置自定義顯示器
// 默認爲DefaultConfigurationFactory.createBitmapDisplayer()
// .displayer(new FadeInBitmapDisplayer(300))
// 設置自定義的handler
// 默認爲new Handler()
// .handler(new Handler())
}
//加載圖片,並且顯示到imageview中
public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
if (mLoader != null) {
mLoader.displayImage(path,imageView,listener);
}
}
public void displayImage(ImageView imageView, String path) {
displayImage(imageView,path,null);
}
}