您的位置:首页 > 其它

universal-image-loader的使用及介绍

2017-09-14 14:32 309 查看

参考:

Android Universal Image Loader 源码分析

Android-Universal-Image-Loader的GitHub地址

ImageLoader中相关配置详解

使用:

1、依赖:

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'


2、权限

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


3、Application中配置ImageLoaderConfiguration参数

//配置一:默认
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));

//配置二:自定义
File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
//File cacheDir = StorageUtils.getCacheDirectory(getApplicationContext());//默认
//File cacheDir = StorageUtils.getOwnCacheDirectory(this, "imageloader/Cache");

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 FIFO,线程池的线程队列类型。目前只有 FIFO, LIFO 两种可供选择。
.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
.discCache(new LimitedAgeDiscCache(cacheDir, 7 * 24 * 60 * 60))
// 自定义缓存路径,7天后自动清除缓存
.writeDebugLogs() // 打印debug log
.build(); //开始构建

ImageLoader imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {//避免多次配置
imageLoader.init(config);
}


4、要显示图片的地方配置DisplayImageOptions参数

DisplayImageOptions options = new DisplayImageOptions.Builder()
//加载图片时的图片
.showImageOnLoading(R.drawable.ic_stub)
//没有图片资源时的默认图片
.showImageForEmptyUri(R.drawable.ic_empty)
//加载失败时的图片
.showImageOnFail(R.drawable.ic_error)
//启用内存缓存,默认false
.cacheInMemory(true)
//启用外存缓存,默认false
.cacheOnDisk(true)
//是否考虑JPEG图像EXIF参数(旋转,翻转)启用EXIF和JPEG图像格式,默认false,// 会识别图片的方向信息
.considerExifParams(true)
//设置显示风格这里是圆角矩形,默认SimpleBitmapDisplayer
//设置图片的显示方式:
//        RoundedBitmapDisplayer(int roundPixels)设置圆角图片
//        FakeBitmapDisplayer()这个类什么都没做
//        FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
//        SimpleBitmapDisplayer()正常显示一张图片
.displayer(new RoundedBitmapDisplayer(30))
//默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
.bitmapConfig(Bitmap.Config.RGB_565)
// default false //设置图片在下载前是否重置,复位,//在ImageView显示图片之前先清空已有的图片内容
.resetViewBeforeLoading(false)
.delayBeforeLoading(1000)//下载前的延迟时间
//设置图片的缩放方式:
//        EXACTLY :图像将完全按比例缩小的目标大小
//        EXACTLY_STRETCHED:图片会缩放到目标大小完全
//        IN_SAMPLE_INT:图像将被二次采样的整数倍
//        IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
//        NONE:图片不会调整
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
.handler(new Handler()) // default
.build();
//displayImage:异步加载并显示图片
ImageLoader.getInstance().displayImage(url,imagview,options);


注意:url可以是网络、SD卡、assets、drawable,如下:

String url = "http://sd.daicash.cn/data/avatar/f1a7eb0aa2f4dad6136f6c5b50c6f4ee/a_1501_1.jpg";// from Web

String url = "file:///mnt/sdcard/image.png"; // from SD card

String url = "assets://image.png"; // from assets

String url = "drawable://" + R.drawable.image; // from drawables(only images, non-9patch)

String url = "content://media/external/audio/albumart/13"; //from content provider


ImageLoader 加载图片主要分为三类接口:

displayImage(…) 表示异步加载并显示图片到对应的ImageAware上。
loadImage(…) 表示异步加载图片并执行回调接口。
loadImageSync(…) 表示同步加载图片。


参数介绍:

uri: 图片的 uri。uri 支持多种来源的图片,包括 http、https、file、content、assets、drawable 及自定义。

imageAware: 一个接口,表示需要加载图片的对象,可包装 View。

options: 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等。

ImageLoadingListener: 图片加载各种时刻的回调接口,包括开始加载、加载失败、加载成功、取消加载四个时刻的回调函数。

ImageLoadingProgressListener: 图片加载进度的回调接口。

示例:

imageLoader.loadImage(url, new ImageSize(35, 35), options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {

}

@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

}

@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

}

@Override
public void onLoadingCancelled(String imageUri, View view) {

}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {

}
});




5、在需要清除缓存的地方可以清除缓存

ImageLoader.getInstance().clearMemoryCache();  // 清除内存缓存

ImageLoader.getInstance().clearDiskCache();  // 清除本地文件缓存


6、设置滚动是否加载

//Universal-Image-Loader提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片。

// 第一个参数就是我们的图片加载对象ImageLoader,
// 第二个参数控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,
// 第三个参数控制猛的滑动界面的时候图片是否加载图片,如果需要暂停传true就行了,
listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));


关于缓存:

内存缓存默认是:LruMemoryCache,

磁盘缓存默认是:UnlimitedDiscCache。

磁盘缓存文件名默认生成方式:HashCodeFileNameGenerator

1、 内存缓存:相关类继承关系及介绍

MemoryCache:内存缓存的接口,里面定义了内存缓存的先关操作,
比如:读取一个缓存,放入一个缓存,移除一个缓存,清空缓存
LruMemoryCache:框架默认,lru算法,强引用
LimitedAgeMemoryCache:超出时间则删除,强引用
FuzzyKeyMemoryCache:同一个图片新的尺寸会覆盖缓存中该图片老的尺寸。
BaseMemoryCache:以强或弱引用的方式保存bitmap,便于虚拟机在内存不足时回收缓存对象。
WeakMemoryCache:弱引用
LimitedMemoryCache:强或弱引用,限制存储容量的内存缓存策略,
最大容量为16M,未超出容量强引用,超出容量软引用
FIFOLimitedMemoryCache:先进先出的缓存策略,当超过缓存限定值,
先删除最先加入缓存的bitmap
LRULimitedMemoryCache:lru算法,弱引用,当超过缓存限定值,
先删除最近最少使用的bitmap
LargestLimitedMemoryCache:当超过缓存限定值,
先删除最大的bitmap
UsingFreqLimitedMemoryCache:当超过缓存限定值,
先删除使用次数最少的bitmap




2、硬盘缓存:相关类继承关系及介绍

DiskCache
LruDiskCache:lru算法,默认缓存大小32kb,超出容量则删除最近最少使用。
BaseDiskCache:默认缓存大小32kb
LimitedAgeDiskCache:设定文件存活的最长时间,当超过这个值,就删除该文件
UnlimitedDiskCache:这个缓存类没有时间限制,框架默认


3、 磁盘缓存文件名的生成:相关类继承关系及介绍

FileNameGenerator:在缓存文件时对文件名称的修改
HashCodeFileNameGenerator:该类负责获取文件名称的hashcode然后转换成字符串。默认
Md5FileNameGenerator:该类把源文件的名称通过md5加密后保存。


关于图片显示

相关类继承关系及介绍:

BitmapDisplayer:在ImageAware中显示bitmap对象的接口。可在实现中对bitmap做一些额外处理,比如加圆角、动画效果。
CircleBitmapDisplayer:
显示原型图片在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。
FadeInBitmapDisplayer:
图片淡入方式显示在ImageAware中,实现了BitmapDisplayer接口。
RoundedBitmapDisplayer:
为图片添加圆角显示在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。
RoundedVignetteBitmapDisplayer:
为图片添加渐变效果的圆角显示在ImageAware中,实现了BitmapDisplayer接口,主要通过RadialGradient实现。
SimpleBitmapDisplayer:
直接将图片显示在ImageAware中,实现了BitmapDisplayer接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐