Android组件化开发之ImageLoader封装

ImageLoader简介

Github:https://github.com/nostra13/Android-Universal-Image-Loader

特征

  • 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
  • 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
  • 支持图片的内存缓存,文件系统缓存或者SD卡缓存
  • 支持图片下载过程的监听
  • 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
  • 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView、GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
  • 提供在较慢的网络下对图片进行加载

ImageLoader封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class ImageLoaderManager {
private static final int THREAD_COUNT = 4;
private static final int PRIORITY = 2;
private static final int MEMORY_CACHE_SIZE = 2 * 1024 * 1024;
private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
private static final int CONNECTION_TIME_OUT = 5 * 1000;
private static final int READ_TIME_OUT = 30 * 1000;

private static ImageLoaderManager mInstance = null;
private static ImageLoader mImageLoader = null;

public static ImageLoaderManager getInstance(Context context) {
if (mInstance == null) {
synchronized (ImageLoaderManager.class) {
if (mInstance == null) {
mInstance = new ImageLoaderManager(context);
}
}
}
return mInstance;
}

/**
* 私有构造方法完成初始化工作
*
* @param context
*/
private ImageLoaderManager(Context context) {
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(context)
.threadPoolSize(THREAD_COUNT)
.threadPriority(Thread.NORM_PRIORITY - PRIORITY)
.denyCacheImageMultipleSizesInMemory()
//.memoryCache(new UsingFreqLimitedMemoryCache(MEMORY_CACHE_SIZE))
.memoryCache(new WeakMemoryCache())
.diskCacheSize(DISK_CACHE_SIZE)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.defaultDisplayImageOptions(getDefaultOptions())
.imageDownloader(new BaseImageDownloader(context, CONNECTION_TIME_OUT, READ_TIME_OUT))
.writeDebugLogs()
.build();

ImageLoader.getInstance().init(config);
mImageLoader = ImageLoader.getInstance();
}

//load the image
public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
if (mImageLoader != null) {
mImageLoader.displayImage(path, imageView, listener);
}
}

public void displayImage(ImageView imageView, String path) {
displayImage(imageView, path, null);
}

/**
* 默认的图片显示Options,可设置图片的缓存策略,编解码方式等,非常重要
* @return
*/
private DisplayImageOptions getDefaultOptions() {

DisplayImageOptions options = new
DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.default_user_avatar)
.showImageOnFail(R.drawable.default_user_avatar)
.cacheInMemory(true) //设置下载的图片是否缓存在内存中
.cacheOnDisk(true) //设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT) //设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) //设置图片的解码类型//
.decodingOptions(new BitmapFactory.Options()) //设置图片的解码配置
.resetViewBeforeLoading(true) //设置图片在下载前是否重置
.build();
return options;
}
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :