2.参考博文
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
Android-Universal-Image-Loader是一个强大的、可定制的图片缓存框架。它实现了缓存的级别,内存缓存、硬盘(sd)缓存。提供了多种缓存策略,也可以自己定义;提供了显示的大小和形状(是否圆角);提供了显示的动画效果(fade)。从Github中下载的zip中,包含了jar包和例子程序。例子程序包括了在listview、gridview、viewpager中显示。其中的一些实现很有参考意义。
要使用先要初始化,例程中是在Application中完成初始化,如下:
public static void initImageLoader(Context context) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory(); //设置是否对同一url但是不同大小的图片进行多种缓存,deny为拒绝
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB,设置disk缓存的大小,默认为无限大,缓存策略为lru
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
}
当然,可以使用默认的构造,如下:
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(configuration);
接下来,就可以获取ImageLoader实例来显示图片了。
ImageLoader.getInstance().displayImage(url1, mImageView1, mDisplayImageOptions);
调用的方法是displayImage(),该方法有好几个重载的方法。但最后都是跳转到参数最齐全的方法中:
public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
第二个参数可以是ImageView类型,另一个重载方法。其中,各个参数从形参名中可以较清晰的知道其作用。
其中,DisplayImageOptions参数,例子中可以参考的写法及注释如下:
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_empty) //空url时的显示
.showImageOnFail(R.drawable.ic_error) //失败时的显示
.resetViewBeforeLoading(true) //
.cacheOnDisk(true) //是否缓存到sd卡中
.imageScaleType(ImageScaleType.EXACTLY) //缩放形式
.bitmapConfig(Bitmap.Config.RGB_565) //
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300)) //设置显示的动画属性
.build();
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) //正在加载时显示的图片
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(20)).build(); //圆角
并不是每一项都要写,可以根据需要选择。第四个参数listener可以监听图片的加载过程,第五个参数可以监听图片的加载进度,配合progress可以实现加载进度条。例子中的GridView中每一项即有一个水平的图片加载进度条,效果很不错。
在listview和gridview中可以设置在滚动或抛掷时是否加载图片:
listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), pauseOnScroll, pauseOnFling));
PauseOnScrollListener构造方法的参数的解释如下:
public PauseOnScrollListener(ImageLoader imageLoader, boolean pauseOnScroll, boolean pauseOnFling)
imageLoader ImageLoader instance for controlling
pauseOnScroll Whether pause ImageLoader during touch scrolling
pauseOnFling Whether pause ImageLoader during fling
也可以清除内存和硬盘(sd卡)中的缓存:
ImageLoader.getInstance().clearMemoryCache();
ImageLoader.getInstance().clearDiskCache();
可以取消正在进行的任务:
ImageLoader.getInstance().stop();
另:一些实现参考记录
1. 之前监听回退键,是监听keydown来实现的,这里它用到了一个回调方法,很方便:
@Override
public void onBackPressed()
2. 它实现了选项item的复选框,方法如下:
MenuItem pauseOnScrollItem = menu.findItem(R.id.item_pause_on_scroll);
pauseOnScrollItem.setVisible(true);
pauseOnScrollItem.setChecked(pauseOnScroll); //菜单项复选框实现
3.它的BaseAdapter中的getView方法好像是与android文档中相同的思路,可以参考。久不写,就淡忘了。