Android-Universal-Image-Loader是Android是用的比较多的一款开源的图片下载库,先看看GitHub上的介绍。
资源类型:
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)
常用方法:
// Get singleton instance
ImageLoader imageLoader = ImageLoader.getInstance();
//在imageView显示资源中的图片
imageLoader.displayImage(imageUri, imageView);
//下载资源中的图片
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
//异步下载资源
Bitmap bmp = imageLoader.loadImageSync(imageUri);
//监听下载进度
imageLoader.displayImage(imageUri, imageView, 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) {
...
}
});
//下载图片后转化为指定宽高
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
//异步下载
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);
//缓存相关的方法
DiskCacheUtils.findInCache(String imageUri, DiskCache diskCache)
DiskCacheUtils.removeFromCache(String imageUri, DiskCache diskCache)
工作流程:
常用配置:
全局初始化此配置项
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(context)
//线程池内加载的数量
.threadPoolSize(3)
.threadPriority(Thread.NORM_PRIORITY - 2)
.tasksProcessingOrder(QueueProcessingType.LIFO)
//同一张图片不同大小内存只缓存一张
.denyCacheImageMultipleSizesInMemory()
//内存缓存的实现memory.impl包中提供多种实现方式
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
//内存缓存文件的最大长宽
.memoryCacheExtraOptions(480, 800)
//缓存的文件数量
.discCacheFileCount(100)
.discCacheSize(50 * 1024 * 1024)
//文件缓存的文件名生成方式
.discCacheFileNameGenerator(new Md5FileNameGenerator())
//文件缓存路径
.discCache(new UnlimitedDiscCache(cacheDir))
//默认的Image显示配置
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
//设置下载器 connectTimeout (5 s),readTimeout (30 s)超时时间
.imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000))
//仅测环境可配置
.writeDebugLogs()
.build();//开始构建
ImageLoader.getInstance().init(config);
文件缓存的目录可以通过ImageLoader的StorageUtils获取
File cacheDir = StorageUtils.getOwnCacheDirectory(argContext, "ImgCache");
以上配置都有默认配置:
ImageLoaderConfiguration.ImageLoaderConfiguration.createDefault()
imageLoader显示图片配置项
DisplayImageOptions options;
options = new DisplayImageOptions.Builder()
//设置图片在下载期间显示的图片
.showImageOnLoading(R.drawable.ic_launcher)
//设置图片Uri为空或是错误的时候显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)
//设置图片加载/解码过程中错误时候显示的图片
.showImageOnFail(R.drawable.ic_launcher)
//设置下载的图片是否缓存在内存中
.cacheInMemory(true)
//设置下载的图片是否缓存在SD卡中
.cacheOnDisc(true)
//是否考虑JPEG图像EXIF参数(旋转,翻转)
.considerExifParams(true)
//设置图片以如何的编码方式显示
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
//设置图片的解码类型
.bitmapConfig(Bitmap.Config.RGB_565)
//设置图片的解码配置
.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)
//int delayInMillis为你设置的下载前的延迟时间
.delayBeforeLoading(int delayInMillis)
//设置图片加入缓存前,对bitmap进行设置
//.preProcessor(BitmapProcessor preProcessor)
//设置图片在下载前是否重置,复位
.resetViewBeforeLoading(true)
//是否设置为圆角,弧度为多少
.displayer(new RoundedBitmapDisplayer(20))
//是否图片加载好后渐入的动画时间
.displayer(new FadeInBitmapDisplayer(100))
.build();//构建完成
设置图片的缩放方式
imageScaleType(ImageScaleType imageScaleType)
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
设置图片的显示效果
displayer(BitmapDisplayer displayer)
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片