学习一个新框架的思路:查看核心类,获得并初始化核心对象,使用对象提供的方法解决问题
程序核心类
ImageLoader , 对象获得方法
ImageLoader.getInstance()
对象初始化方法
ImageLoader.getInstance().init(ImageLoaderConfiguration
configuration
);
初始化类
ImageLoaderConfiguration(这个类本身没有方法,初始化参数依赖依赖他的内部类,例如主要的初始化内部类Builder)
对象获得方法一:
ImageLoaderConfiguration.createDefault(Context context
)获得默认的初始化不需要再使用Builder对象初始化
对象获得方法二:
ImageLoaderConfiguration.Builder.build()(需要Builder对象)
Builder builder = new ImageLoaderConfiguration.Builder(Context);
Builder对象里面有初始化各种参数的方法。
示例{
ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(this);
DiskCache cache = new UnlimitedDiskCache(Utils.getImageCache());
//配置文件保存的路径
builder.diskCache(cache);
//设置保存图片的最大张数
builder.diskCacheFileCount(500);
//配置磁盘缓存保存图片的最大内存
builder.diskCacheSize(50 * 1024 * 1024);
// 获取系统分配给应用程序的最大内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int maxSize = maxMemory / 8;
//配置内存缓存的大小
builder.memoryCacheSize(maxSize);
//配置保存图片的命名器
builder.diskCacheFileNameGenerator(new Md5FileNameGenerator());
}
核心使用方法ImageLoader.getInstance()
.displayImage(String url
,ImageView imageView
,DisplayImageOptions option
,
ImageLoadingListener listener,
ImageLoadingProgressListener progressListener
)可以根据需要筛减
参数详解:
DisplayImageOptions 显示图片的设置(辅助理解:初始化类只是初始化了所能提供的功能,这个类的作用是选择作为本次加载图片这一事件需要的功能)
示例{
//同样使用内部类Builder来控制
DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
//启用内存缓存
builder.cacheInMemory(true);
builder.cacheOnDisk(true);
//设置读取时放置的图片
builder.showImageOnLoading(resLoadingId);
//设置读取失败是放置的图片
builder.showImageOnFail(resFailId);
//获得option对象
builder.build();
}
ImageLoadingListener 设置各种状态下使用的图片(这里的各种对象就不细分了,需要使用的时候查看源码)
{
//设置开始读取时的图片
void onLoadingStarted(String var1, View var2);
//设置读取失败时使用的图片
void onLoadingFailed(String var1, View var2, FailReason var3);
//设置读取成功是设置的图片
void onLoadingComplete(String var1, View var2, Bitmap var3);
//设置取消读取是使用的图片
void onLoadingCancelled(String var1, View var2);
}
ImageLoadingProgressListener
监听图片读取的进度条
{
//设置进度条(后面2个参数分别是当前进度和总进度,用过进度条的不难理解吧)
void onProgressUpdate(String var1, View var2, int var3, int var4);
}
总之使用起来需要控制的就这些东西,其他的异步下载,线程控制,缓存控制,以及各种优化都已经实现了,不需要你来控制,是一个非常方便的图片加载框架