-
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
-
支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
-
支持图片的内存缓存,文件系统缓存或者SD卡缓存
-
支持图片下载过程的监听
-
根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
-
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
-
提供在较慢的网络下对图片进行加载
-
12345678910111213141516171819202122
packagecom.example.uil;importcom.nostra13.universalimageloader.core.ImageLoader;importcom.nostra13.universalimageloader.core.ImageLoaderConfiguration;importandroid.app.Application;publicclassMyApplicationextendsApplication {@OverridepublicvoidonCreate() {super.onCreate();//创建默认的ImageLoader配置参数ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);//Initialize ImageLoader with configuration.ImageLoader.getInstance().init(configuration);}}
-
123456789101112131415161718192021
File cacheDir = StorageUtils.getCacheDirectory(context);ImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(480,800)// default = device screen dimensions.diskCacheExtraOptions(480,800, CompressFormat.JPEG,75,null).taskExecutor(...).taskExecutorForCachedImages(...).threadPoolSize(3)// default.threadPriority(Thread.NORM_PRIORITY -1)// default.tasksProcessingOrder(QueueProcessingType.FIFO)// default.denyCacheImageMultipleSizesInMemory().memoryCache(newLruMemoryCache(2*1024*1024)).memoryCacheSize(2*1024*1024).memoryCacheSizePercentage(13)// default.diskCache(newUnlimitedDiscCache(cacheDir))// default.diskCacheSize(50*1024*1024).diskCacheFileCount(100).diskCacheFileNameGenerator(newHashCodeFileNameGenerator())// default.imageDownloader(newBaseImageDownloader(context))// default.imageDecoder(newBaseImageDecoder())// default.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default.writeDebugLogs().build();
|
1
2
3
4
5
6
7
8
9
|
<manifest>
<uses-permission android:name="android.permission.INTERNET" />
<!-- Include next permission if you want to allow UIL to cache images on SD card --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
<application android:name="MyApplication">
...
</application>
</manifest>
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:layout_gravity="center" android:id="@+id/image" android:src="@drawable/ic_empty" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
|
-
1234567891011121314151617181920212223242526
finalImageView mImageView = (ImageView) findViewById(R.id.image);String imageUrl ="https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";ImageLoader.getInstance().loadImage(imageUrl,newImageLoadingListener() {@OverridepublicvoidonLoadingStarted(String imageUri, View view) {}@OverridepublicvoidonLoadingFailed(String imageUri, View view,FailReason failReason) {}@OverridepublicvoidonLoadingComplete(String imageUri, View view, Bitmap loadedImage) {mImageView.setImageBitmap(loadedImage);}@OverridepublicvoidonLoadingCancelled(String imageUri, View view) {}});
-
12345678910111213
finalImageView mImageView = (ImageView) findViewById(R.id.image);String imageUrl ="https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";ImageLoader.getInstance().loadImage(imageUrl,newSimpleImageLoadingListener(){@OverridepublicvoidonLoadingComplete(String imageUri, View view,Bitmap loadedImage) {super.onLoadingComplete(imageUri, view, loadedImage);mImageView.setImageBitmap(loadedImage);}});
-
123456789101112131415
finalImageView mImageView = (ImageView) findViewById(R.id.image);String imageUrl ="https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";ImageSize mImageSize =newImageSize(100,100);ImageLoader.getInstance().loadImage(imageUrl, mImageSize,newSimpleImageLoadingListener(){@OverridepublicvoidonLoadingComplete(String imageUri, View view,Bitmap loadedImage) {super.onLoadingComplete(imageUri, view, loadedImage);mImageView.setImageBitmap(loadedImage);}});
-
123456789101112131415161718
DisplayImageOptions options =newDisplayImageOptions.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).cacheInMemory(false)// default.cacheOnDisk(false)// default.preProcessor(...).postProcessor(...).extraForDownloader(...).considerExifParams(false)// default.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default.bitmapConfig(Bitmap.Config.ARGB_8888)// default.decodingOptions(...).displayer(newSimpleBitmapDisplayer())// default.handler(newHandler())// default.build();
-
123456789101112131415161718192021
final ImageView mImageView = (ImageView) findViewById(R.id.image);StringimageUrl ="https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";ImageSize mImageSize =newImageSize(100,100);//显示图片的配置DisplayImageOptions options =newDisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build();ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options,newSimpleImageLoadingListener(){@Overridepublicvoid onLoadingComplete(StringimageUri, View view,Bitmap loadedImage) {super.onLoadingComplete(imageUri, view, loadedImage);mImageView.setImageBitmap(loadedImage);}});
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
final ImageView mImageView = (ImageView) findViewById(R.id.image);
String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";
//显示图片的配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);
|
-
1234567891011121314151617
publicclassMyApplicationextendsApplication {@OverridepublicvoidonCreate() {super.onCreate();//创建默认的ImageLoader配置参数ImageLoaderConfiguration configuration =newImageLoaderConfiguration.Builder(this).writeDebugLogs()//打印log信息.build();//Initialize ImageLoader with configuration.ImageLoader.getInstance().init(configuration);}}
-
12345678
imageLoader.displayImage(imageUrl, mImageView, options,newSimpleImageLoadingListener(),newImageLoadingProgressListener() {@OverridepublicvoidonProgressUpdate(String imageUri, View view,intcurrent,inttotal) {}});
-
123456789101112131415
DisplayImageOptions options =newDisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub).showImageOnFail(R.drawable.ic_error).cacheInMemory(true).cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build();finalImageView mImageView = (ImageView) findViewById(R.id.image);String imagePath ="/mnt/sdcard/image.png";String imageUrl = Scheme.FILE.wrap(imagePath);// String imageUrl = "http://img.my.csdn.net/uploads/201309/01/1378037235_7476.jpg";imageLoader.displayImage(imageUrl, mImageView, options);
|
1
2
3
4
5
6
7
8
|
//图片来源于Content provider
String contentprividerUrl = "content://media/external/audio/albumart/13";
//图片来源于assets
String assetsUrl = Scheme.ASSETS.wrap("image.png");
//图片来源于
String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");
|
-
12
listView.setOnScrollListener(newPauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));gridView.setOnScrollListener(newPauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
-
减少线程池中线程的个数,在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)