1_特点
1)多线程下载图片,图片可以来源于网络,文件系统,项目文件夹 assets 中以及 drawable
中等
2)支持随意的配置 ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓
存策略,图片显示选项以及其他的一些配置
3)支持图片的内存缓存,文件系统缓存或者 SD 卡缓存
4)支持图片下载过程的监听
5)根据控件(ImageView)的大小对 Bitmap 进行裁剪,减少 Bitmap 占用过多的内存
6)较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在
ListView,GridView 中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
7)提供在较慢的网络下对图片进行加载
2_下载地址
https://github.com/nostra13/Android-Universal-Image-Loader
3_使用步骤
1)导入 universal-image-loader-1.9.5.jar 到项目中
2)创建 MyApplication 继承 Application,在 oncreate()中初始化 ImageLoader
(1)初始化 ImageLoaderConfiguration
// 初始化参数 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2) // 线程优级 .denyCacheImageMultipleSizesInMemory() // 当同一个 Uri 获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同 图片 .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存 的时候的 URI 名称用 MD5 .tasksProcessingOrder(QueueProcessingType.LIFO) // 设置图 片下载和显示的工作队列排序 .writeDebugLogs() // 打印 debug log .build();
(2)ImageLoader 全局配置
// 全局初始化此配置 ImageLoader.getInstance().init(config);
(3)完整代码
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); initImageLoader(this); } // 初始化 imageloader private void initImageLoader(Context context) { // 初始化参数 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2) // 线程优先级 .denyCacheImageMultipleSizesInMemory() // 当同一个 Uri 获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的 大小的相同图片 .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 将保存的时候的 URI 名称用 MD5 .tasksProcessingOrder(QueueProcessingType.LIFO) // 设置图片下载和显示的工作队列排序 .writeDebugLogs() // 打 印 debug log build(); } }
3)将创建的 MyApplication 在 AndroidManifest.xml 中注册
4)在 AndroidManifest.xml 中添加联网权限和写 sdk 权限
"android.permission.INTERNET"> "android.permission.WRITE_EXTERNAL_STORAGE">
5)初始化 DisplayImageOptions
DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.ic_stub) // 设置图片下载期间显示 的图片 .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片 Uri 为空或 是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过 程中发生错误显示的图片 .cacheInMemory(true) // 设置下载的图片是否缓 存在内存中 .cacheOnDisk(true) // 设置下载的图片是否缓存 在 SD 卡中 .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片 .build();
6)获取 ImageLoader 实例
private ImageLoader imageLoader = ImageLoader.getInstance();
7)显示加载的图片
// 参数 1:图片 url; 参数 2:显示图片的控件; 参数 3:显示图片的设置; 参数 4:监听器 imageLoader.displayImage(Constants.IMAGES[position], holder.image, options, mFirstLoadImageListener);