关于imageloader的一些理解

 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值