一,快速使用(確保ImageLoader只初始化一次,這樣圖片緩存會更加優秀。)
場景:為ImageView設置一張指定Uri的圖片。
1,導包,配置聯網,讀寫SD卡權限。
2,初始化:(如果在自定義Application中執行初始化動作,manifest文件中Application節點的name屬性,記得改變。)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).build();
ImageLoader.getInstance.init(config);
3,參數配置
DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher)
.showImageOnFail(R.drawable.ic_launcher)
.imageScaleType(ImageScaleType.EXACTLY)
.showImageForEmptyUri(R.drawable.ic_launcher).cacheInMemory(true)
.cacheOnDisc(true).displayer(new FadeInBitmapDisplayer(300))
.imageScaleType(ImageScaleType.EXACTLY).build();4,設置圖片。
ImageLoader.displayImage(URI,mImageView,displayImageOptions);
二,功能(翻譯自GitHub)
來源:https://github.com/dodola/Android-Universal-Image-Loader
功能:1,多線程圖片加載;
2,盡可能協調了最廣泛的圖片加載配置(子線程,下載,解碼,內存&硬盤緩存,顯示圖片,和其他);
3,盡可能的監聽下載進程;
4,盡可能的為各種參數定制顯示圖片調用;
5,支持桌面小空間
支持Android 2.0以上版本。
三,初始化參數介紹:
Configuration
所有的選項在配置建造器中都是可選擇的。使用那些你真正想要定制的。
// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.File cacheDir = StorageUtils.getCacheDirectory(context); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75) .taskExecutor(AsyncTask.THREAD_POOL_EXECUTOR) .taskExecutorForCachedImages(AsyncTask.THREAD_POOL_EXECUTOR) .threadPoolSize(3) // default .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .discCache(new UnlimitedDiscCache(cacheDir)) // default .discCacheSize(50 * 1024 * 1024) .discCacheFileCount(100) .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder()) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .enableLogging() .build();Display Option顯示選項,可以被任何一個顯示線程請求。// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using. 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)//如果想要從緩存中加載圖片 ,下面兩句話的參數設置為true。 .cacheInMemory(false) // default。.cacheOnDisc(false) // default .preProcessor(...) .postProcessor(...) .extraForDownloader(...) .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default .bitmapConfig(Bitmap.Config.ARGB_8888) // default .decodingOptions(...) .displayer(new SimpleBitmapDisplayer()) // default .handler(new Handler()) // default .build();
四,用例
顯示圖片所使用的uri:String imageUri = "http://site.com/image.png"; // from Web String imageUri = "file:///mnt/sdcard/image.png"; // from SD card String imageUri = "content://media/external/audio/albumart/13"; // from content provider String imageUri = "assets://image.png"; // from assets String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)注意:使用drawable://除非你真的需要他。時刻要注意使用本地圖片加載方法:setImageResource帶代替ImageLoader。
五,有用的信息
1,ImageLoader.getInstance().init(config); // 在應用開啟的時候初始化。2,<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>sd卡緩存是需要寫入權限3,ImageLoader根據ImageView的width,height確定圖片的寬高。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();
5,內存緩存,sd卡緩存,顯示圖片,可以使用已經初始化過的實現;
6,為了避免使用list,grid,scroll,你可以使用
boolean pauseOnScroll = false; // or true boolean pauseOnFling = true; // or false PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling); listView.setOnScrollListener(listener);