下載地址https://github.com/nostra13/Android-Universal-Image-Loaderandroid
Android 1.5以上支持git
每個圖片的加載和顯示任務都運行在獨立的線程中,除非這個圖片緩存在內存中,這種狀況下圖片會當即顯示。若是須要的圖片緩存在本地,他們會開啓一個獨立的線程隊列。若是在緩存中沒有正確的圖片,任務線程會從線程池中獲取,所以,快速顯示緩存圖片時不會有明顯的障礙。github
須要的權限c#
<uses-permission android:name="android.permission.INTERNET" /> 緩存
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ide
獲取緩存路徑動畫
File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache"); //這個是你但願的緩存文件的目錄:imageloader/Cacheui
File cacheDir = StorageUtils.getCacheDirectory(context); 編碼
1. File cacheDir = StorageUtils.getCacheDirectory(context); 加密
2. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
3. .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 即保存的每一個緩存文件的最大長寬
4. .diskCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) //設置緩存的詳細信息,最好不要設置這個
5. .taskExecutor(...)
6. .taskExecutorForCachedImages(...)
7. .threadPoolSize(3) // default 線程池設置1~5 避免OOM
8. .threadPriority(Thread.NORM_PRIORITY - 1) // default
9. .tasksProcessingOrder(QueueProcessingType.FIFO) // default
10. .denyCacheImageMultipleSizesInMemory()
11. .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
12. .memoryCacheSize(2 * 1024 * 1024)
13. .memoryCacheSizePercentage(13) // default
14. .diskCache(new UnlimitedDiscCache(cacheDir)) // default 磁盤緩存路徑
15. .diskCacheSize(50 * 1024 * 1024)
16. .diskCacheFileCount(100) //緩存的文件數量
17. .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // defaultMd5FileNameGenerator() Md5加密
18. .imageDownloader(new BaseImageDownloader(context)) // default 下載超時
19. .imageDecoder(new BaseImageDecoder()) // default
20. .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
21. .writeDebugLogs()
22. .build();
1. protected ImageLoader imageLoader = ImageLoader.getInstance();
1. DisplayImageOptions options;
2. options = new DisplayImageOptions.Builder()
3. .showImageOnLoading(R.drawable.ic_launcher) //設置圖片在下載期間顯示的圖片
4. .showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri爲空或是錯誤的時候顯示的圖片
5. .showImageOnFail(R.drawable.ic_launcher) //設置圖片加載/解碼過程當中錯誤時候顯示的圖片
6. .cacheInMemory(true)//設置下載的圖片是否緩存在內存中
7. .cacheOnDisc(true)//設置下載的圖片是否緩存在SD卡中
8. .considerExifParams(true) //是否考慮JPEG圖像EXIF參數(旋轉,翻轉)
9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//設置圖片以如何的編碼方式顯示
10. .bitmapConfig(Bitmap.Config.RGB_565)//設置圖片的解碼類型//
11. .decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//設置圖片的解碼配置
12. //.delayBeforeLoading(int delayInMillis)//int delayInMillis爲你設置的下載前的延遲時間
13. //設置圖片加入緩存前,對bitmap進行設置
14. //.preProcessor(BitmapProcessor preProcessor)
15. .resetViewBeforeLoading(true)//設置圖片在下載前是否重置,復位
16. .displayer(new RoundedBitmapDisplayer(20))//是否設置爲圓角,弧度爲多少
17. .displayer(new FadeInBitmapDisplayer(100))//是否圖片加載好後漸入的動畫時間
18. .build();//構建完成
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()正常顯示一張圖片
ImageLoader.getInstance().init(config);
用法
1 ImageLoader.getInstance().displayImage(imageUrl, imageView);
2 加載自定義配置的一個圖片的
ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl表明圖片的URL地址,imageView表明承載圖片的IMAGEVIEW控件 , options表明DisplayImageOptions配置文件
3圖片加載時候帶加載狀況的監聽
4圖片加載時候,帶監聽又帶加載進度條的狀況
使用類Scheme
String assetsUrl = Scheme.ASSETS.wrap("image.png"); String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image"); String file= Scheme.FILE.warp("mnt/sdcard/image.png"); String contentprividerUrl = "content://media/external/audio/albumart/13";
供了PauseOnScrollListener這個類來控制ListView,GridView滑動過程當中中止去加載圖片,該類使用的是代理模式
1. listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
2. gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
第一個參數就是咱們的圖片加載對象ImageLoader, 第二個是控制是否在滑動過程當中暫停加載圖片,若是須要暫停傳true就好了,第三個參數控制猛的滑動界面的時候圖片是否加載
減小線程池中線程的個數,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推薦配置1-5
在DisplayImageOptions選項中配置bitmapConfig爲Bitmap.Config.RGB_565,由於默認是ARGB_8888, 使用RGB_565會比使用ARGB_8888少消耗2倍的內存
在ImageLoaderConfiguration中配置圖片的內存緩存爲memoryCache(new WeakMemoryCache()) 或者不使用內存緩存
在DisplayImageOptions選項中設置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)