Android-Universal-Image-Loader 的使用说明

这个图片异步载入并缓存的类已经被非常多开发人员所使用,是最经常使用的几个开源库之中的一个,主流的应用,随便反编译几个火的项目,都能够见到它的身影。

但是有的人并不知道怎样去使用这库怎样进行配置,网上查到的信息对于刚接触的人来说可能太少了,以下我就把我使用过程中所知道的写了下来,希望能够帮助自己和别人更深入了解这个库的使用和配置。

GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader ,下载最新的库文件,而且导入到项目的LIB下便能够使用。

该库以及DEMO本地下载链接:下载地址

一、介绍

Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可反复使用的仪器为异步图像载入,缓存和显示。所以。假设你的程序里须要这个功能的话,那么最好还是试试它。由于已经封装好了一些类和方法。

我们 能够直接拿来用了。

而不用反复去写了。

事实上,写一个这方面的程序还是比較麻烦的,要考虑多线程,缓存。内存溢出等非常多方面。但是,你也能够參考这个样例来自己写出更好的程序。在此为大家介绍一下:

二、特点

多线程的图像载入
的可能性的宽调谐对ImageLoader的配置(线程池的大小,HTTP选项,内存和光盘快速缓存,显示图像。以及其它)
的图像的可能性中的缓存存储器和/或设备的文件器系统(或SD卡)
能够“听”载入过程中
可自己定义每一个显示的图像调用分隔的选项
Widget支持
Android 1.5以上支持
简单描写叙述一下这个项目的结构:每一个图片的载入和显示任务都运行在独立的线程中,除非这个图片缓存在内存中。这样的情况下图片会马上显示。假设须要的图片缓存在本地,他们会开启一个独立的线程队列。

假设在缓存中没有正确的图片。任务线程会从线程池中获取。因此,快速显示缓存图片时不会有明显的障碍。(别人那边借鉴的这段)

流程图:

三、用法

这是 一个开源的Android关于下载显示图片的工具类。在这个下载包里面jar文件,用于我们导入项目使用,详细用法在包里面也含有。

以下是一个样例:

[java] view plaincopy

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

由于是使用过程中会图片获取要通过网络。而且有缓存设置。所以这2个权限必须要有。

非常多人想知道怎样设置缓存的文件夹,能够通过以下方法:

[java] view plaincopy

  1. File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");

//这个是你希望的缓存文件的文件夹:imageloader/Cache

之后在ImageLoaderConfiguration的配置文件里通过设置

[java] view plaincopy

  1. .discCache(new UnlimitedDiscCache(cacheDir))//自己定义缓存路径

方法来设置该应用的图片缓存路径。

以下我们就来開始看怎样使用这个图片异步载入库把:

一.

先要配置ImageLoaderConfiguration这个类实现全局ImageLoader的实现情况。

能够选择在Application中初始化设置该类。

[java] view plaincopy

  1. ImageLoaderConfiguration config = new ImageLoaderConfiguration
  2. .Builder(context)
  3. .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每一个缓存文件的最大长宽
  4. .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don‘t use it)/设置缓存的详细信息,最好不要设置这个
  5. .threadPoolSize(3)//线程池内载入的数量
  6. .threadPriority(Thread.NORM_PRIORITY - 2)
  7. .denyCacheImageMultipleSizesInMemory()
  8. .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你能够通过自己的内存缓存实现
  9. .memoryCacheSize(2 * 1024 * 1024)
  10. .discCacheSize(50 * 1024 * 1024)
  11. .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
  12. .tasksProcessingOrder(QueueProcessingType.LIFO)
  13. .discCacheFileCount(100) //缓存的文件数量
  14. .discCache(new UnlimitedDiscCache(cacheDir))//自己定义缓存路径
  15. .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
  16. .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
  17. .writeDebugLogs() // Remove for release app
  18. .build();//開始构建
  19. // Initialize ImageLoader with configuration.

以上的配置看个人需求进行选择,不是全部都要进行配置。

配置好ImageLoaderConfiguration后。调用以下方法来实现初始化:

[java] view plaincopy

  1. ImageLoader.getInstance().init(config);//全局初始化此配置

注:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是将缓存下来的文件以什么方式命名

里面能够调用的方法有  1.new Md5FileNameGenerator() //使用MD5对UIL进行加密命名

2.new HashCodeFileNameGenerator()//使用HASHCODE对UIL进行加密命名

二.

使用ImageLoader进行图片载入的时候,先要实例化ImageLoader,调用以下方法进行实例化。在每一个布局里面都要实例化后再使用。

[java] view plaincopy

  1. protected ImageLoader imageLoader = ImageLoader.getInstance();

之后进行显示的图片的各种格式DisplayImageOptions 的设置:

[java] view plaincopy

  1. DisplayImageOptions options;
  2. options = new DisplayImageOptions.Builder()
  3. .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片
  4. .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
  5. .showImageOnFail(R.drawable.ic_launcher)  //设置图片载入/解码过程中错误时候显示的图片
  6. .cacheInMemory(true)//设置下载的图片是否缓存在内存中
  7. .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
  8. .considerExifParams(true)  //是否考虑JPEG图像EXIF參数(旋转,翻转)
  9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以怎样的编码方式显示
  10. .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
  11. .decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置
  12. //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
  13. //设置图片增加缓存前,对bitmap进行设置
  14. //.preProcessor(BitmapProcessor preProcessor)
  15. .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
  16. .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
  17. .displayer(new FadeInBitmapDisplayer(100))//是否图片载入好后渐入的动画时间
  18. .build();//构建完毕

依照你所须要的配置去设置,假设不须要的就能够不做配置。

注:

以上配置中的:

1).imageScaleType(ImageScaleType imageScaleType)  是设置 图片的缩放方式
     缩放类型mageScaleType:

EXACTLY :图像将全然按比例缩小的目标大小

EXACTLY_STRETCHED:图片会缩放到目标大小全然

IN_SAMPLE_INT:图像将被二次採样的整数倍

IN_SAMPLE_POWER_OF_2:图片将降低2倍。直到下一降低步骤,使图像更小的目标大小

NONE:图片不会调整
  2).displayer(BitmapDisplayer displayer)   是设置 图片的显示方式

显示方式displayer:

RoundedBitmapDisplayer(int roundPixels)设置圆角图片

FakeBitmapDisplayer()这个类什么都没做

FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间

         SimpleBitmapDisplayer()正常显示一张图片  

之后依照需求调用

1.纯粹为了载入默认配置的一个图片的

方法:

public void displayImage(String uri, ImageView imageView) {}

详细实现:

[java] view plaincopy

  1. ImageLoader.getInstance().displayImage(imageUrl, imageView); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件

2.载入自己定义配置的一个图片的

方法:

public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {}

详细实现:

[java] view plaincopy

  1. ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件 。 options代表DisplayImageOptions配置文件

3.图片载入时候带载入情况的监听

方法:

public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener) {}

ImageLoadingListener 用于监听图片的下载情况。

详细实现:

[java] view plaincopy

  1. imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
  2. @Override
  3. public void onLoadingStarted() {
  4. //開始载入的时候运行
  5. }
  6. @Override
  7. public void onLoadingFailed(FailReason failReason) {
  8. //载入失败的时候运行
  9. }
  10. @Override
  11. public void onLoadingComplete(Bitmap loadedImage) {
  12. //载入成功的时候运行
  13. }
  14. @Override
  15. public void onLoadingCancelled() {
  16. //载入取消的时候运行
  17. }});

4.图片载入时候。带监听又带载入进度条的情况
   调用:
public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
                    ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}
   详细实现:

[java] view plaincopy

  1. imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
  2. @Override
  3. public void onLoadingStarted() {
  4. //開始载入的时候运行
  5. }
  6. @Override
  7. public void onLoadingFailed(FailReason failReason) {
  8. //载入失败的时候运行
  9. }
  10. @Override
  11. public void onLoadingComplete(Bitmap loadedImage) {
  12. //载入成功的时候运行
  13. }
  14. @Override
  15. public void onLoadingCancelled() {
  16. //载入取消的时候运行
  17. },new ImageLoadingProgressListener() {
  18. @Override
  19. public void onProgressUpdate(String imageUri, View view, int current,int total) {
  20. //在这里更新 ProgressBar的进度信息
  21. }
  22. });

四、注意事项
  1.上述提到的2个权限必须增加,否则会出错
  2.ImageLoaderConfiguration必须配置而且全局化的初始化这个配置ImageLoader.getInstance().init(config);  否则也会出现错误提示
  3.ImageLoader是依据ImageView的height,width确定图片的宽高。
  4.假设经常出现OOM(别人那边看到的。认为非常有提的必要)
   ①降低配置之中线程池的大小,(.threadPoolSize).推荐1-5;
   ②使用.bitmapConfig(Bitmap.config.RGB_565)取代ARGB_8888;
   ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者        try.imageScaleType(ImageScaleType.EXACTLY);
   ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
   ⑤使用.memoryCache(new WeakMemoryCache())。不要使用.cacheInMemory();

以下有人问到怎样载入本地图片什么的。之后把那位亲的回答补充上来,谢谢各位大大提出的不足(那时候用的时候仅仅想到用网络图片了,所以也没考虑这么多)。

  1. String imageUri = "http://site.com/image.png"; // from Web
  2. String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
  3. String imageUri = "content://media/external/audio/albumart/13"; // from content provider
  4. String imageUri = "assets://image.png"; // from assets
  5. String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

大致就讲到这里。可能有的地方不足欢迎提出。希望大家能够更加easy入手、使用这个库。

==========================================================================================

欢迎增加我们的技术交流群:
Android群: 66756039
JavaEE群:  361579846

时间: 2024-10-06 17:30:42

Android-Universal-Image-Loader 的使用说明的相关文章

Android Universal Image Loader 使用

1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL. 简单的说 UIL 就做了一件事--获取图片并显示在相应的控件上. 1.2 基本使用 1.2.1 初始化 添加完依赖后在Application或Activity中初始化ImageLoader,如下: public class YourApplication extends Application

Android Universal Image Loader 架构剖析

简介 Android Universal Image Loader简称UIL, 其github链接https://github.com/nostra13/Android-Universal-Image-Loader, 它用于Android应用中的图片加载(从网络,本地文件,或资源文件),本地缓存(内存和磁盘), 以及展示在ImageView中. 示例 整体框架 各模块的流程图 Task流程: 下载流程: decode流程: cache流程: 主要类图:

Android Universal Image Loader java.io.FileNotFoundException: http:/xxx/lxx/xxxx.jpg

前段时间在使用ImageLoader异步加载服务端返回的图片时总是出现 java.io.FileNotFoundException: http://xxxx/l046/10046137034b1c0db0.jpg at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) at com.nostra13.universalimageloader.core.download.URL

Android图片异步加载框架Universal Image Loader的源码分析

项目地址:https://github.com/nostra13/android-universal-image-loader 1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL. 简单的说 UIL 就做了一件事--获取图片并显示在相应的控件上. 1.2 基本使用 1.2.1 初始化 添加完依赖后在Application或Activity中初始化I

Android 使用Universal Image Loader绘制带圆角的图片(一)

Android 使用Universal Image Loader绘制带圆角的图片(一) 绘制带圆角的控件难吗?貌似不难.对于一个普通layout或者widget,要绘制圆角,只要把 background设置成下面这样的drawable就行了. <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/and

Android中Universal Image Loader开源框架的简单使用

UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument for image loading, caching and displaying. It provides a lot of configuration options and good control over the image loading and caching process.(不知道

开源项目Universal Image Loader for Android 说明文档 (1) 简介

 When developing applications for Android, one often facesthe problem of displaying some graphical content from the Internet. So, youshould provide image loading from the Web in an Android app, their processingand displaying with limited memory aga

Local image caching solution for Android: Square Picasso vs Universal Image Loader

Local image caching solution for Android: Square Picasso vs Universal Image Loader http://stackoverflow.com/questions/19995007/local-image-caching-solution-for-android-square-picasso-vs-universal-image-load图片缓存库使用对比 question I need async image loadin

开源项目Universal Image Loader for Android 说明文档 (1) 简单介绍

 When developing applications for Android, one often facesthe problem of displaying some graphical content from the Internet. So, youshould provide image loading from the Web in an Android app, their processingand displaying with limited memory aga

【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )

作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50824912 相关地址介绍 : -- Universal Image Loader 项目 GitHub 官方地址 : https://github.com/nostra13/Android-Universal-Image-Loader . -- Universal Image Loader 项目完整中文注释版, 已经将所有类都进行了中文注释, 适合源码学习参