您的位置:首页 > 其它

文章标题

2016-06-05 21:49 316 查看

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”);

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);
}

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: