关于imageloader的一些理解

来源:互联网 发布:mac 鼠标 触摸板 编辑:程序博客网 时间:2024/05/22 16:41

 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     //设置额外的内容给ImageDownloader29     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 = newImageLoaderConfiguration.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(newLruMemoryCache(2*1024*1024))//可以通过自己的内存缓存实现
        .memoryCacheSize(2*1024*1024// 内存缓存的最大值
        .memoryCacheSizePercentage(13)// default
        .diskCache(newUnlimitedDiscCache(cacheDir))// default 可以自定义缓存路径 
        .diskCacheSize(50*1024*1024)// 50 Mb sd卡(本地)缓存的最大值
        .diskCacheFileCount(100// 可以缓存的文件数量
        // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
        .diskCacheFileNameGenerator(newHashCodeFileNameGenerator())
        .imageDownloader(newBaseImageDownloader(context))// default
        .imageDecoder(newBaseImageDecoder())// 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 = newDisplayImageOptions.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(newSimpleBitmapDisplayer())// default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
        .handler(newHandler())// 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 0
原创粉丝点击