该项目的Github地址链接:
https://github.com/nostra13/Android-Universal-Image-Loader
File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径
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
.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
.writeDebugLogs() // 打印debug log
.build(); //开始构建
配置好ImageLoaderConfiguration,一定不要忘记进行初始化操作(一般在application中进行初始化)
ImageLoader.getInstance().init(config);
四.图片显示操作
1. 首先要得到ImageLoader的实例(使用的单例模式)
ImageLoader imageLoader = ImageLoader.getInstance();
注:
在每个显示任务(布局中都需实例化才能进行相关操作)
2.相关显示参数配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(false) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(false) // default 设置下载的图片是否缓存在SD卡中
.preProcessor(...)
.postProcessor(...)
.extraForDownloader(...)
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
.decodingOptions(...) // 图片的解码设置
.displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(new Handler()) // default
.build();
注:
如果DisplayImageOption没有传递给ImageLoader.displayImage(…)方法,那么从配置默认显示选项(ImageLoaderConfiguration.defaultDisplayImageOptions(…))将被使用。
1).imageScaleType(ImageScaleType imageScaleType)
//设置图片的缩放方式
缩放类型mageScaleType:
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
2).displayer(BitmapDisplayer displayer)
//设置图片的显示方式
显示方式displayer:
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
参数补充:
//是否考虑JPEG图像EXIF参数(旋转,翻转)
.considerExifParams(true)
// 图片加载好后渐入的动画时间
.displayer(new FadeInBitmapDisplayer(100))
3.显示图片
1)ImageLoader.getInstance().displayImage(uri, imageView);
2)ImageLoader.getInstance().displayImage(uri, imageView, options);
3) ImageLoader.getInstance().displayImage(uri, imageView, listener);
4)ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
5)ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);
参数解析:
imageUrl 图片的URL地址�
imageView 显示图片的ImageView控件
options DisplayImageOptions配置信息
listener 图片下载情况的监听
progressListener 图片下载进度的监听
方法1:最简单的方式,我们只需要定义要显示的图片的URL和要显示图片的ImageView。这种情况下,图片的显示选项会使用默认的配置;
方法2:加载自定义配置的一个图片;
方法3:加载带监听的一个图片;
方法4:加载自定义配置且带监听的一个图片;
方法5:加载自定义配置且带监听和进度条的一个图片。
ImageLoader.getInstance().displayImage(uri, imageView, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
//开始加载
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
//加载失败
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
//加载成功
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
//加载取消
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
//加载进度
}
});
5.清除缓存
public void onClearMemoryClick(View view) {
Toast.makeText(this, "清除内存缓存成功", Toast.LENGTH_SHORT).show();
// 清除内存缓存
ImageLoader.getInstance().clearMemoryCache();
}
public void onClearDiskClick(View view) {
Toast.makeText(this, "清除本地缓存成功", Toast.LENGTH_SHORT).show();
// 清除本地缓存
ImageLoader.getInstance().clearDiskCache();
}
我还可以这样用
ImageLoader imageLoader;
ImageLoaderConfiguration configuration;
DisplayImageOptions options;
public Imagelode(Context context , ArrayList> arrayList) {
this.context=context;
this.arrayList=arrayList;
imageLoader = ImageLoader.getInstance();
//设置SDCard缓存路径
File file = new File(Environment.getExternalStorageDirectory().toURI());
configuration = new ImageLoaderConfiguration.Builder(context)//加载图像布局
.discCache(new UnlimitedDiscCache(file))//自定义缓存路径
.discCacheFileNameGenerator(new HashCodeFileNameGenerator())//加密文件
.build();//构建
//将过程属性加载给ImageLoader对象
imageLoader.init(configuration);
//设置下载属性
options = new DisplayImageOptions.Builder()//显示图像选项
.showStubImage(R.drawable.im_msg_state_fail_resend) // 设置图片下载期间显示的图片
// .showImageOnLoading(R.drawable.down) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher_round) // 设置图片加载或解码过程中发生错误显示的图片
// .displayer(new RoundedBitmapDisplayer(50))//设置圆角
.cacheOnDisc()//设置支持SDCard缓存
// .displayer(new FadeInBitmapDisplayer(2000))//设置渐变
.build();
}
//使用
imageLoader.displayImage(arrayList.get(i).get("img"),
viewById1,options );
ImageLoader imageLoader;
// ImageLoaderConfiguration configuration;
// DisplayImageOptions options;
imageLoader = ImageLoader.getInstance();
// //设置SDCard缓存路径
// File file = new File(Environment.getExternalStorageDirectory().toURI());
// configuration = new ImageLoaderConfiguration.Builder(context)//加载图像布局
// .discCache(new UnlimitedDiscCache(file))//自定义缓存路径
// .discCacheFileNameGenerator(new HashCodeFileNameGenerator())//加密文件
// .build();//构建
// //将过程属性加载给ImageLoader对象
// imageLoader.init(configuration);
//设置下载属性
// options = new DisplayImageOptions.Builder()//显示图像选项
// .showStubImage(R.drawable.im_msg_state_fail_resend) // 设置图片下载期间显示的图片
//// .showImageOnLoading(R.drawable.down) // 设置图片下载期间显示的图片
// .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
// .showImageOnFail(R.mipmap.ic_launcher_round) // 设置图片加载或解码过程中发生错误显示的图片
//// .displayer(new RoundedBitmapDisplayer(50))//设置圆角
// .cacheOnDisc()//设置支持SDCard缓存
//// .displayer(new FadeInBitmapDisplayer(2000))//设置渐变
// .build();
imageLoader.displayImage(arrayList.get(i).get("img"),
viewById1,options );