ImageLoader 配置解析

 整理一下关于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();
  1. resetViewBeforeLoading(false)  // default  设置图片在下载前是否重置,复位    .
  2. delayBeforeLoading(1000)  //下载前的延迟时间 一般没用着,不用管它;
  3. preProcessor(...) .postProcessor(...) 这一般情况下也没有去设置,不用太关注;
  4. considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转);
  5. bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型;
  6. bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型;
  7. displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少  
  8. 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 ,自己没有试验,不知道改变圆角大小的方式行不行的通。

猜你喜欢

转载自blog.csdn.net/sjh_389510506/article/details/88126863
今日推荐