关于 ImageLoader 说的够细了。。。

简介ImageLoader(一)

分类: android 开源及第三方项目2014-05-30 12:14 14126人阅读 评论(0) 收藏 举报

ImageLoader

使用该开源项目的之前,先给该开源项目在Github上的地址吧。

ImageLoader在GitHub

开始的时候,自己看得也是很头痛,因为许多自己不要的东西上面配置的也多,下面简单给有需要的童鞋介绍下使用吧,暂不涉及太多的东西。

我们看看项目的结构:

这里有四个例子,针对ListView ,Gallery ,GridView和Viewpager大量使用图片,做了简单的使用示例。

里面写的很复杂,入门的话,也许要看许久,现在省略理论的那些东西,说下直接点的。

下面是一般的使用步骤:

1.重写application,并初始化配置,在这有缓存图片和不缓存图片两种设置:

在这之前,你需要倒入demo中的jar包,这个没啥说的。

在oncreate()中添加:

1.未缓存图片:

[html] view plaincopyprint?

  1. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
  2. .threadPriority(Thread.NORM_PRIORITY - 2)
  3. .denyCacheImageMultipleSizesInMemory()
  4. .discCacheFileNameGenerator(new Md5FileNameGenerator())
  5. .tasksProcessingOrder(QueueProcessingType.LIFO)
  6. .enableLogging() // Not necessary in common
  7. .build();
  8. ImageLoader.getInstance().init(config);

2.缓存图片:

[html] view plaincopyprint?

  1. DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
  2. .cacheInMemory().cacheOnDisc().build();
  3. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
  4. context).defaultDisplayImageOptions(defaultOptions)
  5. .threadPriority(Thread.NORM_PRIORITY - 2)
  6. .denyCacheImageMultipleSizesInMemory()
  7. .discCacheFileNameGenerator(new Md5FileNameGenerator())
  8. .tasksProcessingOrder(QueueProcessingType.LIFO).build();
  9. ImageLoader.getInstance().init(config);

在使用ImageLoader的实例之前,你需要初始化该配置,否则会报初始化错误。一般我们直接写在application中初始化。

在初始化配置完成后,在清单中写入你自定义的application,并写入访问权限。

[html] view plaincopyprint?

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <application
  4. android:name="com.demo.DemoApp"

2.在activity中加载图片,这里针对不同的参数,可能使用的方法和配置也不咋相同:

其实对于图片的加载主要有三种方法:

1.displayImages及其重载,在Imageview组件中直接加载图片。

[html] view plaincopyprint?

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
  2. ImageLoadingListener listener, ImageLoadingProgressListener progressListener)

其同名的重载方法,使用的多的是下面几个:

直接加载:

[html] view plaincopyprint?

  1. public void displayImage(String uri, ImageAware imageAware) {
  2. displayImage(uri, imageAware, null, null, null);
  3. }

选项加载:

[html] view plaincopyprint?

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options) {
  2. displayImage(uri, imageAware, options, null, null);
  3. }

带监听加载:

[html] view plaincopyprint?

  1. public void displayImage(String uri, ImageAware imageAware, ImageLoadingListener listener) {
  2. displayImage(uri, imageAware, null, listener, null);
  3. }

选项+监听加载:

[html] view plaincopyprint?

  1. public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
  2. ImageLoadingListener listener) {
  3. displayImage(uri, imageAware, options, listener, null);
  4. }

2.loadImages及其重载,它的内部其实也会调用displayImages方法:

[html] view plaincopyprint?

  1. public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
  2. ImageLoadingListener listener, ImageLoadingProgressListener progressListener)

主要的是那个监听的方法ImageLoadListener,会监听开始,失败,完成和取消的状态。在完成后,会返回bitmap对象。

[html] view plaincopyprint?

  1. void onLoadingComplete(String imageUri, View view, Bitmap loadedImage);

3.loadImageSync及其重载,它会返回一个Bitmap对象,自定义View的时候,需要bitmap来绘制图形,就可以使用该方法了。

[html] view plaincopyprint?

  1. public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options)

加载的方法说完了,下面来谈谈选项:

[html] view plaincopyprint?

  1. public final class DisplayImageOptions {
  2. private final int imageResOnLoading;
  3. private final int imageResForEmptyUri;
  4. private final int imageResOnFail;
  5. private final Drawable imageOnLoading;
  6. private final Drawable imageForEmptyUri;
  7. private final Drawable imageOnFail;
  8. private final boolean resetViewBeforeLoading;
  9. private final boolean cacheInMemory;
  10. private final boolean cacheOnDisk;
  11. private final ImageScaleType imageScaleType;
  12. private final Options decodingOptions;
  13. private final int delayBeforeLoading;
  14. private final boolean considerExifParams;
  15. private final Object extraForDownloader;
  16. private final BitmapProcessor preProcessor;
  17. private final BitmapProcessor postProcessor;
  18. private final BitmapDisplayer displayer;
  19. private final Handler handler;
  20. private final boolean isSyncLoading;
  21. private DisplayImageOptions(Builder builder) {
  22. imageResOnLoading = builder.imageResOnLoading;
  23. imageResForEmptyUri = builder.imageResForEmptyUri;
  24. imageResOnFail = builder.imageResOnFail;
  25. imageOnLoading = builder.imageOnLoading;
  26. imageForEmptyUri = builder.imageForEmptyUri;
  27. imageOnFail = builder.imageOnFail;
  28. resetViewBeforeLoading = builder.resetViewBeforeLoading;
  29. cacheInMemory = builder.cacheInMemory;
  30. cacheOnDisk = builder.cacheOnDisk;
  31. imageScaleType = builder.imageScaleType;
  32. decodingOptions = builder.decodingOptions;
  33. delayBeforeLoading = builder.delayBeforeLoading;
  34. considerExifParams = builder.considerExifParams;
  35. extraForDownloader = builder.extraForDownloader;
  36. preProcessor = builder.preProcessor;
  37. postProcessor = builder.postProcessor;
  38. displayer = builder.displayer;
  39. handler = builder.handler;
  40. isSyncLoading = builder.isSyncLoading;
  41. }

这个看自己的需要配置,各个参数的作用跟它的英文意思一样,认真看下大概就明白了,没必要所有的都去配置,下面是一般使用的选项参数:

缓存图片:

[html] view plaincopyprint?

  1. DisplayImageOptions   options = new DisplayImageOptions.Builder()
  2. .showStubImage(R.drawable.ic_stub)          // 设置图片下载期间显示的图片
  3. .showImageForEmptyUri(R.drawable.ic_empty)  // 设置图片Uri为空或是错误的时候显示的图片
  4. .showImageOnFail(R.drawable.ic_error)       // 设置图片加载或解码过程中发生错误显示的图片
  5. .cacheInMemory(true)                        // 设置下载的图片是否缓存在内存中
  6. .cacheOnDisc(true)                          // 设置下载的图片是否缓存在SD卡中
  7. .displayer(new RoundedBitmapDisplayer(20))  // 设置成圆角图片
  8. .build();                                   // 创建配置过得DisplayImageOption对象
  9. ImageLoader.getInstance().displayImage(url, imageView, options);

好了,基本的步骤就差不多了。

效果(图片来自百度图库):

demo下载

注意:

1.但是要注意传入的URI ,要分网络地址和本地地址,我这传入的是本地图片地址。

对该方法的说明:

[html] view plaincopyprint?

  1. /**
  2. * Adds display image task to execution pool. Image will be set to ImageView when it‘s turn.<br />
  3. * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call
  4. *
  5. * @param uri       Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png")
  6. * @param imageView {@link ImageView} which should display image
  7. * @param options   {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image
  8. *                  decoding and displaying. If <b>null</b> - default display image options
  9. *                  {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions)
  10. *                  from configuration} will be used.
  11. * @throws IllegalStateException    if {@link #init(ImageLoaderConfiguration)} method wasn‘t called before
  12. * @throws IllegalArgumentException if passed <b>imageView</b> is null
  13. */
  14. public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {
  15. displayImage(uri, new ImageViewAware(imageView), options, null, null);
  16. }

对于本地的图片 ,在其绝对地址前面要加入"file://"。网络图片就直接写路径了。

由于我的这个是最新的包,可能跟以前老的版本不同,看到有些网友说的是:

[html] view plaincopyprint?

  1. String imageUri = "http://site.com/image.png"; // 网络图片
  2. String imageUri = "file:///mnt/sdcard/image.png"; //SD卡图片
  3. String imageUri = "content://media/external/audio/albumart/13"; // 媒体文件夹
  4. String imageUri = "assets://image.png"; // assets
  5. String imageUri = "drawable://" + R.drawable.image; //  drawable文件

2.:Unable to resolve target ‘android-19‘ 错误:

修改编译的版本为你现在有的版本,或者升级你的版本到19.然后在project.properties中修改你的版本号跟编译的版本号相同。

时间: 2024-10-14 06:20:04

关于 ImageLoader 说的够细了。。。的相关文章

SI 系列入门 之 手把手构建 Spring MVC 工程

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. SI 前文有述,Spring MVC + MyBatis 的简称,因为 Spring MVC 内部已有注入功能,故不考虑其是否是利用了 Sprin

【我所认知的BIOS】—&gt; uEFI AHCI Driver(5) — 第一个protocol终于要开始安装了

[我所认知的BIOS]-> uEFI AHCI Driver(5) - 第一个protocol终于要开始安装了 LightSeed 4/28/2014 文章对EFI_DRIVER_BINDING_PROTOCOL的每个 成员的讲解是重点.它是我们遇到的第一个uEFI里面的protocol所以我都尽量把它讲的够细.这一篇文章开始就真正进入到install protocol的函数里面去了.拭目以待吧~ [右键点击图片,在新窗口打开是可以放大看的]

【我所认知的BIOS】—&amp;gt; uEFI AHCI Driver(4) — 第一个Protocol真难搞

[我所认知的BIOS]-> uEFI AHCI Driver(4) - 第一个Protocol真难搞 LightSeed 4/23/2014 文章对EFI_DRIVER_BINDING_PROTOCOL的每一个 成员的解说是重点.它是我们遇到的第一个uEFI里面的protocol所以我都尽量把它讲的够细.下一篇文章開始就真正进入到install protocol的函数里面去了. [右键点击图片,在新窗体打开是能够放大看的] [我所认知的BIOS]-> uEFI AHCI Driver(4) -

yii2 随笔(七)依赖注入——(3)yii2的依赖注入

原文地址:p=124" target="_blank">http://ivhong.com/? p=124(ivhong.com 是我的博客主址) yii2的依赖注入的核心代码在 yii\di.在这个包(目录)以下有3个文件.各自是Container.php(容器),Instance.php(实例),ServiceLocator(服务定位器),如今我们讨论一下前两个.服务定位器能够理解一个服务的注冊表.这个不影响我们讨论依赖注入,它也是依赖注入的一种应用. 我们还是从代

Android onPause和onSaveInstanceState的区别

onPause在Activity部分不可见的时候被调用,onSaveInstanceState在需要空出内存给当前Activity的时候执行.onSaveInstanceState有时候在onPause()运行前调用,有时候不(Pre-HONEYCOMB 版本前可能先调用onSaveInstanceState,之后onPause先调用).Android Activity的详细文档在这里. 再来看函数名,onSaveInstanceState,保存的是Activity实例的状态,强调Instanc

团队作业9--展示博客

1.团队成员的简介和个人博客地址,团队的源码仓库地址 徐   璨:http://www.cnblogs.com/xucan0110/ 申   悦:http://www.cnblogs.com/sy0717/ 林方言:http://www.cnblogs.com/dialect/ 连永刚:http://www.cnblogs.com/lianyg/ 李志强:http://www.cnblogs.com/lizhiqiang0/ 魏   辉:http://www.cnblogs.com/weihui

行业分析方向与框架

转来的,原文及作者:http://bbs.pinggu.org/home.php?mod=space&uid=1683981,分享给大家 入手:“企业.行业和产业”,或者从生产流程角度,把一个个环节剥离出来,然后一个行业包括哪些就很明显了. 其中名词解释:行业和市场 行业指产出相同类型或高度可替代性产品或服务的企业集合:而产业指多个在产品或服务的产出上具有协作关系的行业集合. 我们所说的“市场规模”是指买者花费的总和,而不是卖者销售额的总和. 最后强调一下行业=供给,市场=需求. 然后,行业分析

分享我写的2D格斗游戏,C语言实现

Json.FastJson.Gson 数据结构对单链表进行数据排序 请教各位几个小问题,有点晕了不太理解 StringUtil对字符串类型参数进行校验的工具类 11r玖橇粱http://p.baidu.com/pai/center?uid=417061626361333830393359a8&type=g1p2cx饭嚼舜41iw9o俸也褐http://p.baidu.com/pai/center?uid=309261626361636339363556a8&type=rj3tst思啦特wb

(译)win32asm实例-3

就职百度期间,王劲分别创立了百度移动云事业部.百度大数据部.百度基础架构(云计算)部.百度美国研发中心.百度深圳研发中心:并以百度深度学习实验室(IDL)为基础,联合创立了百度研究院.在2010年4月到2015年4月的5年间,王劲同时还负责百度商业变现的技术与产品(凤巢). 2013年百度启动无人车项目,2015年12月14日,百度成立了自动驾驶事业部,王劲出任事业部总经理. 王劲一度成为百度无人车业务的代言人,直到2017年3月份,王劲离开百度,据腾讯<一线>报道,王劲与百度的分手并不愉快.