文章标题
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); } });
相关文章推荐
- ZLYZD团队第四周项目总结
- Python之路_Day5
- 关于 Python generator(生成器)的类比
- 关于调用adapter.notifydatasetchanged()没有效果的问题
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- c++实验7--素数和回文
- Ndk-->通过Javah生成.h头文件(Jni入门之路)
- 【nginx】kevent() reported that connect() failed (61: Connection refused)
- javaScript实现省市区三级联动
- Spark 日志
- 神经网络算法的python实现
- [GitHub]第七讲:GitHub issues
- 实现组合查询数据并分页显示
- UVa 12174 Shuffle (滑动窗口)
- Maven构建灵活配置文件
- [Android] 布局文件中设置android:gravity 和 android:layout_gravity属性
- 第七次上机作业
- c++作业-7
- Redis数据类型和常用命令
- c++第七次实验