一.概述
ImageLoader是一个强大的图片加载框架,下面是它的一些主要特性:
- 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
- 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
- 支持图片的内存缓存,文件系统缓存或者SD卡缓存
- 支持图片下载过程的监听
- 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
- 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
- 提供在较慢的网络下对图片进行加载
先看一张效果图
二.使用
首先导入jar包,最好是最新的哦,否则某些方法可能无法正常使用
然后进行一些配置,根据你的需求,下面给出代码:
public class ImageLoaderConfig {
public static void initImageLoader(Context context, File cacheFile) {
// 获取本地缓存的目录, 该目录在sd卡的根目
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(context);
// 线程池加载数量
builder.threadPoolSize(3);
// 设定线程优先级
builder.threadPriority(Thread.NORM_PRIORITY - 2);
// 设定内存为弱缓存
// builder.memoryCache(new WeakMemoryCache());
// 设定内存图片缓存大小的限制,不设置默认为屏幕的宽,即保存的每个缓存文件的最大长宽
builder.memoryCacheExtraOptions(480, 800);
// 设置硬盘缓存100mb
builder.discCacheSize(100 * 1024 * 1024);
// builder.memoryCacheSize(1 * 1024 * 1024);
builder.denyCacheImageMultipleSizesInMemory();
// 设定缓存的路径
builder.discCache(new UnlimitedDiscCache(cacheFile));
// 设定网络连接超时timeout:10s 读取网络连接超时read timeout 60s
builder.imageDownloader(new BaseImageDownloader(context, 10 * 1000, 60 * 1000));
// 设置ImageLoader的配置参
builder.defaultDisplayImageOptions(initDisplayOptions(true));
// 初始化imageLoader
ImageLoader.getInstance().init(builder.build());
}
/**
* 配置ImageLoder
*/
@SuppressWarnings("unused")
private static DisplayImageOptions initDisplayOptions(boolean isShowDefault) {
// 初始化ImageLoader
@SuppressWarnings("deprecation")
DisplayImageOptions options = new DisplayImageOptions.Builder().imageScaleType(ImageScaleType.EXACTLY)
.showImageOnLoading(R.drawable.ic_launcher) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
.cacheInMemory(true) // 设置下载的图片是否缓存在内存中
.cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // 设置图片下载前的延迟
.delayBeforeLoading(100)// delayInMillis为你设置的延迟时间
.displayer(new FadeInBitmapDisplayer(100))// 淡入
.resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位
.bitmapConfig(Bitmap.Config.RGB_565)
// .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
.build(); // 创建配置过得DisplayImageOption对象
return options;
}
}
然后在全局Application里面初始化
public class MyApplication extends Application {
/** SDCard路径/
public static final String SD_PATH = Environment
.getExternalStorageDirectory().getAbsolutePath();
public static final String BASE_PATH = SD_PATH + "/listviewViewpager/";
public static final String BASE_IMAGE_CACHE = BASE_PATH + "listviewViewpager/images/";
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
ImageLoaderConfig.initImageLoader(this, new File(BASE_IMAGE_CACHE));
}
}
最后使用下面的代码来加载图片
ImageLoader.getInstance().displayImage(url, imageView);
只是一行代码,根据图片的url地址来加载图片,很方便,当然还有其他一些重构的方法,大家下去自己研究吧,时间有限,这里就不介绍了。