Android ImageLoader 工具类
2019-10-31 本文已影响0人
afkT
DevUtils Github
- ImageLoader 工具类 -> ImageLoaderUtils.java
方法 | 注释 |
---|---|
init | 初始化 ImageLoader 加载配置 |
defaultOptions | 获取 DisplayImageOptions 图片加载配置 |
getDefaultImageOptions | 获取图片默认加载配置 |
getNoCacheImageOptions | 获取不使用缓存的图片加载配置 |
getCacheImageOptions | 获取 ImageLoader 图片缓存加载配置 |
cloneImageOptions | 克隆图片加载配置 |
getFadeInBitmapDisplayer | 获取图片渐变动画加载配置 |
getRoundedBitmapDisplayer | 获取圆角图片加载配置 |
getBitmapDisplayerOptions | 获取图片效果加载配置 |
displayImage | 图片显示 |
loadImage | 图片加载 |
loadImageSync | 图片同步加载 |
clearDiskCache | 清除磁盘缓存 |
clearMemoryCache | 清除内存缓存 |
getDiskCache | 获取 SDCard 缓存空间 |
getMemoryCache | 获取 Memory 缓存空间 |
handleSlowNetwork | 设置是否处理弱网情况 |
denyNetworkDownloads | 设置是否禁止网络下载 |
cancelDisplayTask | 取消图片显示任务 |
getLoadingUriForView | 通过 ImageView 获取图片加载地址 |
setDefaultLoadingListener | 设置全局加载监听事件 |
destroy | 销毁操作 |
pause | 暂停图片加载 |
resume | 恢复图片加载 |
stop | 停止图片加载 |
package dev.other;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.annotation.DrawableRes;
import android.widget.ImageView;
import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.memory.MemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.BitmapDisplayer;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
/**
* detail: ImageLoader 工具类
* @author Ttt
* <pre>
* init: ImageLoaderUtils.init(getApplicationContext());
* use modify: 修改 defaultOptions() 配置、以及加载默认图片资源
* </pre>
*/
public final class ImageLoaderUtils {
private ImageLoaderUtils() {
}
// 图片加载中
private static int sImageLoadingRes = 0;
// 图片地址异常
private static int sImageUriErrorRes = 0;
// 图片 ( 加载 / 解码 ) 失败
private static int sImageFailRes = 0;
// 图片默认加载配置
private static final DisplayImageOptions DF_OPTIONS = defaultOptions();
// ========
// = init =
// ========
/**
* 初始化 ImageLoader 加载配置
* @param context {@link Context}
*/
public static void init(final Context context) {
DisplayImageOptions options = DF_OPTIONS;
// 针对图片缓存的全局加载配置 ( 主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置 )
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.defaultDisplayImageOptions(options) // 加载 DisplayImageOptions 参数
.threadPriority(Thread.NORM_PRIORITY - 2) // 线程池内加载的数量
.denyCacheImageMultipleSizesInMemory() // 加载同一 URL 图片时 imageView 从小变大时从内存缓存中加载
//.memoryCache(new UsingFreqLimitedMemoryCache(1024 * 1024)) // 通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存最大值
.memoryCacheSizePercentage(13)
//.diskCacheSize(50 * 1024 * 1024) // SDCard 缓存最大值 50mb
//.discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的 URI 名称用 MD5 加密
//.diskCacheFileCount(100) // 缓存的文件数量
//.memoryCache(new WeakMemoryCache()).diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.imageDownloader(new BaseImageDownloader(context)) // default
.tasksProcessingOrder(QueueProcessingType.LIFO).build();
ImageLoader.getInstance().init(config);
}
// =======================
// = DisplayImageOptions =
// =======================
/**
* 获取 DisplayImageOptions 图片加载配置
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions defaultOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(sImageLoadingRes) // 设置图片在下载期间显示的图片
.showImageForEmptyUri(sImageUriErrorRes) // 设置图片 Uri 为空或是错误的时候显示的图片
.showImageOnFail(sImageFailRes) // 设置图片 ( 加载 / 解码 ) 过程中错误时候显示的图片
.imageScaleType(ImageScaleType.EXACTLY) // 设置图片缩放
.bitmapConfig(Bitmap.Config.RGB_565) // 图片解码类型
.cacheInMemory(true) // 是否保存到内存
.considerExifParams(false) // 是否考虑 JPEG 图像 EXIF 参数 ( 旋转、翻转 )
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
//.displayer(new FadeInBitmapDisplayer(100)) // 图片加载好后渐入的动画时间
.cacheOnDisk(true).build(); // 是否保存到 SDCard 上
return options;
}
/**
* 获取图片默认加载配置
* @param loadingRes 设置加载中显示的图片
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getDefaultImageOptions(@DrawableRes final int loadingRes) {
DisplayImageOptions.Builder optionsBuilder = cloneImageOptions(DF_OPTIONS);
optionsBuilder.showImageOnLoading(loadingRes) // 设置图片在下载期间显示的图片
.showImageForEmptyUri(loadingRes) // 设置图片 Uri 为空或是错误的时候显示的图片
.showImageOnFail(loadingRes); // 设置图片 ( 加载 / 解码 ) 过程中错误时候显示的图片
return optionsBuilder.build();
}
/**
* 获取不使用缓存的图片加载配置
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getNoCacheImageOptions() {
return getCacheImageOptions(false, false, -1);
}
/**
* 获取不使用缓存的图片加载配置
* @param loadingRes 设置加载中显示的图片
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getNoCacheImageOptions(@DrawableRes final int loadingRes) {
return getCacheImageOptions(false, false, loadingRes);
}
/**
* 获取 ImageLoader 图片缓存加载配置
* @param isCache 是否缓存在内存中
* @param isCacheDisk 是否保存在 SDCard
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getCacheImageOptions(final boolean isCache, final boolean isCacheDisk) {
return getCacheImageOptions(isCache, isCacheDisk, -1);
}
/**
* 获取 ImageLoader 图片加载配置
* @param isCache 是否缓存在内存中
* @param isCacheDisk 是否保存在 SDCard
* @param loadingRes 设置加载中显示的图片
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getCacheImageOptions(final boolean isCache,
final boolean isCacheDisk,
@DrawableRes final int loadingRes) {
DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder()
.imageScaleType(ImageScaleType.EXACTLY) // 设置图片缩放
.bitmapConfig(Bitmap.Config.RGB_565) // 图片解码类型
.cacheInMemory(isCache) // 是否保存到内存
.displayer(new RoundedBitmapDisplayer(20))
.cacheOnDisk(isCacheDisk); // 是否保存到 SDCard 上
// 判断是否使用加载图片
if (loadingRes != 0) {
builder.showImageOnLoading(loadingRes) // 设置图片在下载期间显示的图片
.showImageForEmptyUri(loadingRes) // 设置图片 Uri 为空或是错误的时候显示的图片
.showImageOnFail(loadingRes); // 设置图片 ( 加载 / 解码 ) 过程中错误时候显示的图片
}
return builder.build();
}
/**
* 克隆图片加载配置
* @param options 待克隆加载配置
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions.Builder cloneImageOptions(final DisplayImageOptions options) {
return (options != null) ? new DisplayImageOptions.Builder().cloneFrom(options) : null;
}
// ============
// = 图片效果 =
// ============
/**
* 获取图片渐变动画加载配置
* @param durationMillis 动画持续时间
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getFadeInBitmapDisplayer(final int durationMillis) {
return getBitmapDisplayerOptions(cloneImageOptions(DF_OPTIONS).build(), new FadeInBitmapDisplayer(durationMillis));
}
/**
* 获取图片渐变动画加载配置
* @param options {@link DisplayImageOptions}
* @param durationMillis 动画持续时间
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getFadeInBitmapDisplayer(final DisplayImageOptions options, final int durationMillis) {
if (options != null) {
return getBitmapDisplayerOptions(options, new FadeInBitmapDisplayer(durationMillis));
}
return options;
}
// =
/**
* 获取圆角图片加载配置
* @param cornerRadiusPixels 圆角大小
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getRoundedBitmapDisplayer(final int cornerRadiusPixels) {
return getBitmapDisplayerOptions(cloneImageOptions(DF_OPTIONS).build(), new RoundedBitmapDisplayer(cornerRadiusPixels));
}
/**
* 获取圆角图片加载配置
* @param options {@link DisplayImageOptions}
* @param cornerRadiusPixels 圆角大小
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getRoundedBitmapDisplayer(final DisplayImageOptions options, final int cornerRadiusPixels) {
if (options != null) {
return getBitmapDisplayerOptions(options, new RoundedBitmapDisplayer(cornerRadiusPixels));
}
return options;
}
/**
* 获取图片效果加载配置
* @param options {@link DisplayImageOptions}
* @param displayer {@link BitmapDisplayer}
* @return {@link DisplayImageOptions}
*/
public static DisplayImageOptions getBitmapDisplayerOptions(final DisplayImageOptions options, final BitmapDisplayer displayer) {
if (options != null && displayer != null) {
return cloneImageOptions(options).displayer(displayer).build();
}
return null;
}
// ============
// = 图片显示 =
// ============
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
*/
public static void displayImage(final String uri, final ImageView imageView) {
if (imageView != null) ImageLoader.getInstance().displayImage(uri, imageView);
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param options {@link DisplayImageOptions}
*/
public static void displayImage(final String uri, final ImageView imageView, final DisplayImageOptions options) {
if (imageView != null) {
// 判断是否使用自定义图片加载配置
if (options != null) {
ImageLoader.getInstance().displayImage(uri, imageView, options);
} else {
ImageLoader.getInstance().displayImage(uri, imageView);
}
}
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param imageSize {@link ImageSize}
*/
public static void displayImage(final String uri, final ImageView imageView, final ImageSize imageSize) {
if (imageView != null && imageSize != null) {
ImageLoader.getInstance().displayImage(uri, imageView, imageSize);
}
}
/**
* 图片显示
* @param uri Image Uri
* @param imageAware new ImageViewAware(imageView);
* @param options {@link DisplayImageOptions}
*/
public static void displayImage(final String uri, final ImageAware imageAware, final DisplayImageOptions options) {
if (imageAware != null) {
if (options != null) {
ImageLoader.getInstance().displayImage(uri, imageAware, options);
} else {
ImageLoader.getInstance().displayImage(uri, imageAware);
}
}
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param listener 加载监听事件
*/
public static void displayImage(final String uri, final ImageView imageView, final ImageLoadingListener listener) {
displayImage(uri, imageView, null, listener);
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param options {@link DisplayImageOptions}
* @param listener 加载监听事件
*/
public static void displayImage(final String uri, final ImageView imageView,
final DisplayImageOptions options, final ImageLoadingListener listener) {
if (imageView != null) {
if (options != null) {
ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
} else {
ImageLoader.getInstance().displayImage(uri, imageView, listener);
}
}
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void displayImage(final String uri, final ImageView imageView,
final ImageLoadingListener listener,
final ImageLoadingProgressListener progressListener) {
displayImage(uri, imageView, null, listener, progressListener);
}
/**
* 图片显示
* @param uri Image Uri
* @param imageView ImageView
* @param options {@link DisplayImageOptions}
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void displayImage(final String uri, final ImageView imageView,
final DisplayImageOptions options, final ImageLoadingListener listener,
final ImageLoadingProgressListener progressListener) {
if (imageView != null) {
ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);
}
}
// ============
// = 图片加载 =
// ============
/**
* 图片加载
* @param uri Image Uri
* @param listener 加载监听事件
*/
public static void loadImage(final String uri, final ImageLoadingListener listener) {
loadImage(uri, null, null, listener, null);
}
/**
* 图片加载
* @param uri Image Uri
* @param imageSize {@link ImageSize}
* @param listener 加载监听事件
*/
public static void loadImage(final String uri, final ImageSize imageSize, final ImageLoadingListener listener) {
loadImage(uri, imageSize, null, listener, null);
}
/**
* 图片加载
* @param uri Image Uri
* @param imageSize {@link ImageSize}
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void loadImage(final String uri, final ImageSize imageSize,
final ImageLoadingListener listener,
final ImageLoadingProgressListener progressListener) {
loadImage(uri, imageSize, null, listener, progressListener);
}
/**
* 图片加载
* @param uri Image Uri
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void loadImage(final String uri, final ImageLoadingListener listener,
final ImageLoadingProgressListener progressListener) {
loadImage(uri, null, null, listener, progressListener);
}
/**
* 图片加载
* @param uri Image Uri
* @param options {@link DisplayImageOptions}
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void loadImage(final String uri, final DisplayImageOptions options,
final ImageLoadingListener listener, final ImageLoadingProgressListener progressListener) {
loadImage(uri, null, options, listener, progressListener);
}
/**
* 图片加载
* @param uri Image Uri
* @param imageSize {@link ImageSize}
* @param options {@link DisplayImageOptions}
* @param listener 加载监听事件
* @param progressListener 图片下载监听事件
*/
public static void loadImage(final String uri, final ImageSize imageSize, final DisplayImageOptions options,
final ImageLoadingListener listener, final ImageLoadingProgressListener progressListener) {
ImageLoader.getInstance().loadImage(uri, imageSize, options, listener, progressListener);
}
// ================
// = 图片同步加载 =
// ================
/**
* 图片同步加载
* @param uri Image Uri
* @return {@link Bitmap}
*/
public static Bitmap loadImageSync(final String uri) {
return loadImageSync(uri, null, null);
}
/**
* 图片同步加载
* @param uri Image Uri
* @param imageSize {@link ImageSize}
* @return {@link Bitmap}
*/
public static Bitmap loadImageSync(final String uri, final ImageSize imageSize) {
return loadImageSync(uri, imageSize, null);
}
/**
* 图片同步加载
* @param uri Image Uri
* @param options {@link DisplayImageOptions}
* @return {@link Bitmap}
*/
public static Bitmap loadImageSync(final String uri, final DisplayImageOptions options) {
return loadImageSync(uri, null, options);
}
/**
* 图片同步加载
* @param uri Image Uri
* @param imageSize {@link ImageSize}
* @param options {@link DisplayImageOptions}
* @return {@link Bitmap}
*/
public static Bitmap loadImageSync(final String uri, final ImageSize imageSize, final DisplayImageOptions options) {
return ImageLoader.getInstance().loadImageSync(uri, imageSize, options);
}
// ============
// = 其他操作 =
// ============
/**
* 清除磁盘缓存
*/
public static void clearDiskCache() {
ImageLoader.getInstance().clearDiskCache();
}
/**
* 清除内存缓存
*/
public static void clearMemoryCache() {
ImageLoader.getInstance().clearMemoryCache();
}
/**
* 获取 SDCard 缓存空间
* @return {@link DiskCache}
*/
public static DiskCache getDiskCache() {
return ImageLoader.getInstance().getDiskCache();
}
/**
* 获取 Memory 缓存空间
* @return {@link MemoryCache}
*/
public static MemoryCache getMemoryCache() {
return ImageLoader.getInstance().getMemoryCache();
}
/**
* 设置是否处理弱网情况
* @param handleSlowNetwork 是否处理弱网情况
*/
public static void handleSlowNetwork(final boolean handleSlowNetwork) {
ImageLoader.getInstance().handleSlowNetwork(handleSlowNetwork);
}
/**
* 设置是否禁止网络下载
* @param denyNetworkDownloads 是否禁止网络下载
*/
public static void denyNetworkDownloads(final boolean denyNetworkDownloads) {
ImageLoader.getInstance().denyNetworkDownloads(denyNetworkDownloads);
}
// =
/**
* 取消图片显示任务
* @param imageView ImageView
*/
public static void cancelDisplayTask(final ImageView imageView) {
if (imageView != null) {
ImageLoader.getInstance().cancelDisplayTask(imageView);
}
}
/**
* 通过 ImageView 获取图片加载地址
* @param imageView ImageView
* @return Image Uri
*/
public static String getLoadingUriForView(final ImageView imageView) {
if (imageView != null) {
return ImageLoader.getInstance().getLoadingUriForView(imageView);
}
return null;
}
/**
* 设置全局加载监听事件
* @param listener 加载监听事件
*/
public static void setDefaultLoadingListener(final ImageLoadingListener listener) {
ImageLoader.getInstance().setDefaultLoadingListener(listener);
}
// =
/**
* 销毁操作
*/
public static void destroy() {
ImageLoader.getInstance().destroy();
}
/**
* 暂停图片加载
*/
public static void pause() {
ImageLoader.getInstance().pause();
}
/**
* 恢复图片加载
*/
public static void resume() {
ImageLoader.getInstance().resume();
}
/**
* 停止图片加载
*/
public static void stop() {
ImageLoader.getInstance().stop();
}
}