整理一下关于ImageLoader的相关配置,为了后面知道这些是如何工作和其目的。
https://github.com/nostra13/Android-Universal-Image-Loader 这是ImageLoader的GitHub地址,若有其他不懂的,可以看这里,包括原理,用法示例等等。
全局配置,如下:
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheSize((int) (Runtime.getRuntime().maxMemory() / 8))
.memoryCacheExtraOptions(480, 800) // 这个属性好像没有什么用,不用管它,一般不去设置
.diskCacheExtraOptions(480, 800, null) // 这个也没有啥作用,不设置就行了
.imageDownloader(new BaseImageDownloader(this)) // default 网络图片下载器,可以设置超时时间和连接时间
.imageDecoder(new BaseImageDecoder(false)) // default 图片解码器,负责将图片输入流 InputStream 转换为 Bitmap 对象,不是图片解密,只是把流转换为bitmap
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.diskCache(new UnlimitedDiscCache(new File(""))) // 确定文件缓存策略
.diskCacheSize(50 * 1024 * 1024) // 大小
.diskCacheFileCount(100) // 数量
.memoryCache(new LruMemoryCache(5 * 1024 * 1024)) // 定义自己的内存缓存策略
.memoryCacheSize(5 * 1024 * 1024) // 内存缓存大小
.threadPoolSize(3) // 线程数量
.threadPriority(Thread.NORM_PRIORITY - 1) //降低线程优先级,保证UI主线程不受太大影响
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(configuration);
针对每次显示图片的Display Options配置,如下:
public static synchronized DisplayImageOptions getDeviceListCoverImageOptions() {
if (mDeviceListImageOptions == null) {
mDeviceListImageOptions = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.device_cover_default_icon)
.showImageOnFail(R.drawable.device_cover_default_icon)
.showImageOnLoading(R.drawable.device_cover_default_icon)
.considerExifParams(true)
.cacheInMemory(true)
.cacheOnDisk(true)
.imageScaleType(EXACTLY_STRETCHED)
.displayer(new RoundedBitmapDisplayer(20)).build();
}
return mDeviceListImageOptions;
}
这是一个一般的display options 设置的代码示例,官方文档中给出的所有属性如下:
// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.
// See the sample project how to use ImageLoader correctly.
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)
.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(new SimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
- resetViewBeforeLoading(false) // default 设置图片在下载前是否重置,复位 .
- delayBeforeLoading(1000) //下载前的延迟时间 一般没用着,不用管它;
- preProcessor(...) .postProcessor(...) 这一般情况下也没有去设置,不用太关注;
- considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转);
- bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型;
- bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型;
- displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
- displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
1 2 3点其实用不太着,不用太关注;
imageScaleType(ImageScaleType imageScaleType) 是设置 图片的缩放方式,缩放类型mageScaleType:
- EXACTLY :图像将完全按比例缩小的目标大小
- EXACTLY_STRETCHED:图片会缩放到目标大小完全
- IN_SAMPLE_INT:图像将被二次采样的整数倍
- IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
- NONE:图片不会调整
这里的ImageScaleType 其实可以用ImageView自带的scaleType 去替代,个人觉得scaleType比imageScaleType更好;
.displayer(BitmapDisplayer displayer) 是设置 图片的显示方式 ,显示方式displayer:
- RoundedBitmapDisplayer(int roundPixels)设置圆角图片
- FakeBitmapDisplayer()这个类什么都没做
- FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
- SimpleBitmapDisplayer()正常显示一张图片
补充几点注意点:
1.displayer(new RoundedBitmapDisplayer(20)) 这里的20 单位是dp, 不是px ,不用去转换;
2.如果要显示圆形图片,可以用自定义的CircleImageView去装载图片,或者是 displayer(new RoundedBitmapDisplayer(90))或者360 ,自己没有试验,不知道改变圆角大小的方式行不行的通。