https://github.com/nostra13/Android-Universal-Image-Loader
ImageLoader作用
1.多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中
2.支持图片的内存缓存,文件系统缓存或者SD卡缓存
3.支持图片下载过程的监听
4.根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
加载第三方库
Gradle代码
‘com.nostra13.universalimageloader:universal-image-loader:1.9.4’
权限
1 |
<uses-permission android:name="android.permission.INTERNET" /> |
ImageLoader加载的类型
1 |
"http://site.com/image.png"// from Web |
ImageLoader的加载、显示配置:
加载Image时的配置(ImageLoaderConfiguration)
自定义配置 - 通过new ImageLoaderConfiguration.Builder().builder()方法进行实例化。
默认配置 - 通过ImageLoaderConfiguration 的createDefault进行实例化。
- 默认配置
1 |
File diskCache = StorageUtils.getOwnCacheDirectory(context, "BNJ_IMAGE_CACHE/"); |
使用
通过ImageLoader的getInstance().init()方法传入上述options对象.
显示Image时的配置(DisplayImageOptions)
自定义配置 - 通过new DisplayImageOptions.Builder().builder()方法实例化对象
1 |
DisplayImageOptions options = new DisplayImageOptions.Builder() |
加载图片的方法
loadImage跟displayImage
A.ImageLoader.getInstance().loadImage(uri地址,图片大小,上述配置,监听器,进度监听器);
B.ImageLoader.getinstance().displayImage(uri地址,控件,上述配置,监听器,进度监听器);
区别
A方法可以设置图片大小,即自定义下载图片的大小
B方法会根据控件大小及ImageScaleType来裁剪图片
常用displayImage方法
监听器有两种
SimpleImageLoadingListener(简单的监听器)
ImageLoadingListener (该监听器能实现 加载图片取消时,失败时的方法)
ImageLoadingProgressListener
最后在监听器的onLoadingComplete方法里,设置图片显示即可
进阶
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
第一个参数是imageLoader,第二个参数是滑动时是否加载图片,第三个参数是猛的滑动时是否加载图片
OOM问题
如果使用了ImageLoader出现OutOfMemoryError的话,那么可以通过下列方法解决
关闭memory的cache。
减少线程池的大小
用Bitmap.Config.RGB565代替ARGB8888
使用.imageScaleType(ImageScaleType.EXACTLY 或ImageScaleType.IN_SAMPLE_INT)
使用.diskCacheExtraOption(480, 320, null)获取缓存文件
1
2DiskCache diskCache = ImageLoader.getInstance().getDiskCache();
File cacheFile = DiskCacheUtils.findInCache(imgpath, diskCache);
ImageView ScaleType
ImageLoader的使用及封装
使用
1.全局初始化ImageLoader,配置ImageLoader的参数(ImageLoaderConfiguration)
2.配置图片加载的参数(DisplayImageOptions)
3.创建ImageLoader的对象,调用displayImage方法
封装
1.利用单例模式创建ImageLoaderTool的对象
1 |
public class ImageLoaderTool{ |
2.初始化ImageLoaderConfiguration
1 |
|
3.封装DisplayImage方法
1 |
/** |
示例 - 封装ImageLoader
1 |
/** |
使用ImageLoader时加载相同URL的问题
//使用displayImage,而不使用loadImage,因为loadImage会导致当同时加载同一个url的时候出现task被取消的情况
//详情见https://github.com/nostra13/Android-Universal-Image-Loader/issues/804
1 |
// 解决方法 |
解决listvie宽度设置wwrap_content无效的方法
现象
listview宽度设置wrap_content无效
解决办法,添加FrameLayout跟LinearLayout设置weight
修改前代码
1 |
<ListView |
修改后代码
1 |
<LinearLayout |
本文标题:ImageLoader的理解
文章作者:TanJunDang
发布时间:2015年09月17日 - 00时00分
最后更新:2018年05月14日 - 15时44分
原始链接:http://TanJunDang.github.io/2015/09/17/ImageLoaderTool/