Android组件化开发之ImageLoader封装
ImageLoader简介
Github:https://github.com/nostra13/Android-Universal-Image-Loader
特征
- 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
- 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
- 支持图片的内存缓存,文件系统缓存或者SD卡缓存
- 支持图片下载过程的监听
- 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
- 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView、GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
- 提供在较慢的网络下对图片进行加载
ImageLoader封装
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;
}
}
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/11/android-componentization-development-imageloader-packaging/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
打赏
海报
Android组件化开发之ImageLoader封装
ImageLoader简介
Github:https://github.com/nostra13/Android-Universal-Image-Loader
特征
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹as……
文章目录
关闭
共有 0 条评论