Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。
最近翻了很多网上的博客,自己总结一下:
Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration
三者的关系
ImageLoaderConfiguration是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。
ImageLoader是具体下载图片,缓存图片,显示图片的具体执行类,它有两个具体的方法displayImage(...)、loadImage(...),但是其实最终他们的实现都是displayImage(...)。
DisplayImageOptions用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。
DisplayImageOptions
用于设置图片显示的类。
1.此类的功能:
1 //设置图片在下载期间显示的图片 2 showStubImage(R.drawable.ic_launcher) 3 4 //设置图片Uri为空或是错误的时候显示的图片 5 showImageForEmptyUri(R.drawable.ic_empty) 6 7 //设置图片加载/解码过程中错误时候显示的图片 8 showImageOnFail(R.drawable.ic_error) 9 10 //设置图片在下载前是否重置,复位 11 resetViewBeforeLoading() 12 13 //设置下载的图片是否缓存在内存中 14 cacheInMemory() 15 16 //设置下载的图片是否缓存在SD卡中 17 cacheOnDisc() 18 19 //设置图片的解码类型 20 bitmapConfig(Bitmap.Config.RGB_565) 21 22 //设置图片的解码配置 23 decodingOptions(android.graphics.BitmapFactory.Options decodingOptions) 24 25 //设置图片下载前的延迟 26 delayBeforeLoading(int delayInMillis) 27 28 //设置额外的内容给ImageDownloader 29 extraForDownloader(Object extra) 30 31 //设置图片加入缓存前,对bitmap进行设置 32 preProcessor(BitmapProcessor preProcessor) 33 34 //设置显示前的图片,显示后这个图片一直保留在缓存中 35 postProcessor(BitmapProcessor postProcessor) 36 37 //设置图片以如何的编码方式显示 38 imageScaleType(ImageScaleType imageScaleType)
2.此类的两种创建方式:
/** * DisplayImageOptions 创建的两种方式。 */ // 创建默认的DisplayImageOptions DisplayImageOptions option_0 = DisplayImageOptions.createSimple(); // 使用DisplayImageOptions.Builder()创建DisplayImageOptions DisplayImageOptions option_1 = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_launcher) .showImageOnFail(R.drawable.ic_error) .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory() .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20)) .build();
3.类中的方法使用:
/** * 设置图片的显示方式 * @param displayer */ displayer(BitmapDisplayer displayer) displayer: RoundedBitmapDisplayer(int roundPixels)设置圆角图片 FakeBitmapDisplayer()这个类什么都没做 FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间 SimpleBitmapDisplayer()正常显示一张图片
/** * 图片的缩放方式 * @param imageScaleType */ imageScaleType(ImageScaleType imageScaleType) imageScaleType: EXACTLY :图像将完全按比例缩小的目标大小 EXACTLY_STRETCHED:图片会缩放到目标大小完全 IN_SAMPLE_INT:图像将被二次采样的整数倍 IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小 NONE:图片不会调整
在应用中配置ImageLoaderConfiguration参数(只能配置一次,如多次配置,则默认第一次的配置参数)
使用默认设置
1
|
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(
this
);
|
自己配置参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
File cacheDir = StorageUtils.getCacheDirectory(context);
//缓存文件夹路径
ImageLoaderConfiguration config =
new
ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(
480
,
800
)
// default = device screen dimensions 内存缓存文件的最大长宽
.diskCacheExtraOptions(
480
,
800
,
null
)
// 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
.taskExecutor(...)
.taskExecutorForCachedImages(...)
.threadPoolSize(
3
)
// default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY -
2
)
// default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO)
// default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(
new
LruMemoryCache(
2
*
1024
*
1024
))
//可以通过自己的内存缓存实现
.memoryCacheSize(
2
*
1024
*
1024
)
// 内存缓存的最大值
.memoryCacheSizePercentage(
13
)
// default
.diskCache(
new
UnlimitedDiscCache(cacheDir))
// default 可以自定义缓存路径
.diskCacheSize(
50
*
1024
*
1024
)
// 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(
100
)
// 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(
new
HashCodeFileNameGenerator())
.imageDownloader(
new
BaseImageDownloader(context))
// default
.imageDecoder(
new
BaseImageDecoder())
// default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// default
.writeDebugLogs()
// 打印debug log
.build();
//开始构建
|
4、图片显示操作
a、首先要得到ImageLoader的实例(使用的单例模式)
1
|
ImageLoader imageLoader = ImageLoader.getInstance();
|
注:在每个显示任务(布局中都需实例化才能进行相关操作
b、相关显示参数配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
DisplayImageOptions options =
new
DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
// 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_empty)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_error)
// 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(
false
)
// default 设置图片在加载前是否重置、复位
.delayBeforeLoading(
1000
)
// 下载前的延迟时间
.cacheInMemory(
false
)
// default 设置下载的图片是否缓存在内存中
.cacheOnDisk(
false
)
// default 设置下载的图片是否缓存在SD卡中
.preProcessor(...)
.postProcessor(...)
.extraForDownloader(...)
.considerExifParams(
false
)
// default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888)
// default 设置图片的解码类型
.decodingOptions(...)
// 图片的解码设置
.displayer(
new
SimpleBitmapDisplayer())
// default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(
new
Handler())
// default
.build();
|
c、显示图片
1
2
3
4
5
|
1
、 ImageLoader.getInstance().displayImage(uri, imageView);
2
、 ImageLoader.getInstance().displayImage(uri, imageView, options);
3
、 ImageLoader.getInstance().displayImage(uri, imageView, listener);
4
、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
5
、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);
|
参数解析:
1
2
3
4
5
|
imageUrl 图片的URL地址
imageView 显示图片的ImageView控件
options DisplayImageOptions配置信息
listener 图片下载情况的监听
progressListener 图片下载进度的监听
|
http://www.cnblogs.com/kissazi2/p/3886563.html
http://www.tuicool.com/articles/2yYfiy
http://www.2cto.com/kf/201412/361295.html
http://hunankeda110.iteye.com/blog/1897961