Universal-Image-Loader使用解析
ImageLoader有什么功能
- (1).使用多线程加载图片
- (2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
- (3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
- (4).采用监听器监听图片加载过程及相应事件的处理;
- (5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
ImageLoader用法
- 1、初始化:创建默认的ImageLoader配置参数
- ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
- 最后实例以及初始化:ImageLoader.getInstance().init(configuration);
- 2、DisplayImageOptions:ImageLoader.getInstance().displayImage()中的参数,
常用配置:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.error) //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
.build();//构建完成
全部设置:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading) //设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.error) //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(true)//设置下载的图片是否缓存在内存中
.cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
//.decodingOptions(BitmapFactory.Options decodingOptions)//设置图片的解码配置
.delayBeforeLoading(0)//int delayInMillis为你设置的下载前的延迟时间
//设置图片加入缓存前,对bitmap进行设置
//.preProcessor(BitmapProcessor preProcessor)
.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
.displayer(new RoundedBitmapDisplayer(20))//不推荐用!!!!是否设置为圆角,弧度为多少
.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间,可能会出现闪动
.build();//构建完成
- 3、ImageLader提供了几个图片加载的方法,一般使用displayImage(),主要是这几个displayImage(), loadImage(),loadImageSync(),loadImageSync()方法是同步的,android4.0有个特性,
网络操作不能在主线程,所以loadImageSync()方法我们就不去使用。 - 4、OutOfMemoryError问题
- 减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
- 在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
- 在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
- 在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
- 5、支持Uri:2种表述方式
- Image-Loader框架会根据不同的Uri获取到输入流
- String imageUri = “http://site.com/image.png“; // from Web
- String imageUri = “file:///mnt/sdcard/image.png”; // from SD card
- String imageUri = “content://media/external/audio/albumart/13”; // from content provider
- String imageUri = “assets://image.png”; // from assets
- String imageUri = “drawable://” + R.drawable.image; // from drawables (only images, non-9patch)
- Image-Loader框架会根据不同的Scheme获取到输入流
- //图片来源于assets
- String assetsUrl = Scheme.ASSETS.wrap(“image.png”);
- //图片来源于
- String drawableUrl = Scheme.DRAWABLE.wrap(“R.drawable.image”);
- Image-Loader框架会根据不同的Uri获取到输入流
- 6、displayImage()加载图片(一般格式)
- 参数一:String,图片资源
- 参数二:imageView
- 参数三:DisplayImageOptions选项
- 参数四:动画监听器
- AnimateImageListener animateImageListener = new AnimateImageListener();
- ImageLoader.getInstance().displayImage(pics[position],holder.iV,options,animateImageListener);
private static class AnimateImageListener extends SimpleImageLoadingListener {
private static List<String> displayImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayImages.add(imageUri);
}
}
}
}
- 7、GirdView,ListView设置滑动时加载图片
- listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
- gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
- pauseOnScroll为true时,滚动时暂停加载图片
- pauseOnFling为true时,快速滑动时暂停加载图片
- 8、我们在加载网络图片的时候,经常有需要显示图片下载进度的需求,Image-Loader当然也提供这样的功能,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了
imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,
int total) {
}
});
- 9、控制图片加载过程前,中,后,取消等的监听器SimpleImageLoadingListener,可采用缺省模式,需要哪个用哪个
- onLoadingStarted
- onLoadingFailed
- onLoadingComplete
- onLoadingCancelled
ImageLoader.getInstance().loadImage(imageUrl, new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
mImageView.setImageBitmap(loadedImage);
}
});