本文引自: https://github.com/nostra13/Android-Universal-Image-Loader
http://www.cnblogs.com/hsx514/p/3460179.html
http://www.cnblogs.com/tianzhijiexian/p/4034304.html
Android-Universal-Image-Loader是Android里面一个比较好用的图片异步下载器,支持的URL也比较多如:
"http://site.com/image.png" // from Web "file:///mnt/sdcard/image.png" // from SD card "file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail) "content://media/external/images/media/13" // from content provider "content://media/external/video/media/13" // from content provider (video thumbnail) "assets://image.png" // from assets "drawable://" + R.drawable.img // from drawables (non-9patch images)
Simple
// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view
// which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView);
// Load image, decode it to Bitmap and return Bitmap to callback
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
// Load image, decode it to Bitmap and return Bitmap synchronously
Bitmap bmp = imageLoader.loadImageSync(imageUri);
Complete
// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view
// which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
...
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
...
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
...
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
...
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
...
}
});
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
}
});
// Load image, decode it to Bitmap and return Bitmap synchronously
ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);
相关设置:
ImageLoaderConfiguration设置
1.作用:为ImageLoader提供下载配置(全局设置)
2.构造方法:
/** * ImageLoaderConfiguration 创建的两种方式。 */ // 创建默认的ImageLoaderConfiguration ImageLoaderConfiguration configuration_0 = ImageLoaderConfiguration .createDefault(this); // 使用DisplayImageOptions.Builder()创建DisplayImageOptions ImageLoaderConfiguration configuration_1 = new ImageLoaderConfiguration.Builder( this).threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO).enableLogging() .build();
3.常用方法设置说明:
/** *当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片 */ denyCacheImageMultipleSizesInMemory()
/** * 设置本地图片缓存 * @param discCache */ discCache(DiscCacheAware discCache) 系统提示的:DiscCacheAware 类型说明(在com.nostra13.universalimageloader.cache.disc.impl包下能找到如下的类): FileCountLimitedDiscCache(File cacheDir, int maxFileCount):设置缓存路径和缓存文件的数量,超过数量后,old将被删除 FileCountLimitedDiscCache(File cacheDir,FileNameGenerator fileNameGenerator,int maxFileCount):第二个参数是通过图片的url生成的唯一文件名。 LimitedAgeDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, long maxAge) :第二个参数同上 LimitedAgeDiscCache(File cacheDir, long maxAge):maxAge为定义的时间,超过时间后,图片将被删除 TotalSizeLimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, int maxCacheSize) :第二个参数同上 TotalSizeLimitedDiscCache(File cacheDir, int maxCacheSize) :定义缓存的大小,如超过了,就会删除old图片。 UnlimitedDiscCache(File cacheDir) :缓存没有限制 UnlimitedDiscCache(File cacheDir, FileNameGenerator fileNameGenerator):第二个参数同上
/** * 设置图片保存到本地的参数 * @param maxImageWidthForDiscCache 保存的最大宽度 * @param maxImageHeightForDiscCache 保存的最大高度 * @param compressFormat 保存的压缩格式 * @param compressQuality 提示压缩的程度,有0-100.想png这种图片无损耗,就不必设置了 */ discCacheExtraOptions(int maxImageWidthForDiscCache, int maxImageHeightForDiscCache, android.graphics.Bitmap.CompressFormat compressFormat, int compressQuality)
/** * 设置缓存文件的数量 * @param maxFileCount 数量 */ discCacheFileCount(int maxFileCount)
/** * 设置缓存的大小 * @param maxCacheSize 大小 */ discCacheSize(int maxCacheSize)
/** * 设置缓存文件的名字 * @param fileNameGenerator */ discCacheFileNameGenerator(FileNameGenerator fileNameGenerator) fileNameGenerator: HashCodeFileNameGenerator() :通过HashCode将url生成文件的唯一名字 Md5FileNameGenerator():通过Md5将url生产文件的唯一名字
/** * 启动Log信息记录,用于查看异常信息 */ enableLogging()
/** * 设置缓存信息 * @param maxImageWidthForMemoryCache 缓存图片的最大宽度,默认为手机的屏幕宽度 * @param maxImageHeightForMemoryCache 缓存图片的最大高度,默认为手机的屏幕宽度 */ memoryCacheExtraOptions(int maxImageWidthForMemoryCache, int maxImageHeightForMemoryCache)
/** * 添加个线程池,进行下载 * @param executor 线程池 * 如果进行了这个设置,那么threadPoolSize(int),threadPriority(int),tasksProcessingOrder(QueueProcessingType) * 将不会起作用 */ taskExecutor(Executor executor)
/** * 设置用于显示图片的线程池大小 * @param threadPoolSize */ threadPoolSize(int threadPoolSize)
/** * 设置线程的优先级 * @param threadPriority */ threadPriority(int threadPriority)
/** * 设置图片下载和显示的工作队列排序 * @param tasksProcessingType */ tasksProcessingOrder(QueueProcessingType tasksProcessingType)
/** * 下载缓存图片 * @param executorForCachedImages */ taskExecutorForCachedImages(Executor executorForCachedImages)
DisplayImageOptions设置
1.作用:用于设置图片显示的类。
2.构造方法:
/** * DisplayImageOptions 创建的两种方式。 */ // 创建默认的DisplayImageOptions DisplayImageOptions option_0 = DisplayImageOptions.createSimple(); // 使用DisplayImageOptions.Builder()创建DisplayImageOptions DisplayImageOptions option_1 = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_launcher) .showImageOnFail(R.drawable.ic_error) .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory() .cacheOnDisc().displayer(new RoundedBitmapDisplayer(20)) .build();
3.常用方法:
//设置图片在下载期间显示的图片 showStubImage(R.drawable.ic_launcher) //设置图片Uri为空或是错误的时候显示的图片 showImageForEmptyUri(R.drawable.ic_empty) //设置图片加载/解码过程中错误时候显示的图片 showImageOnFail(R.drawable.ic_error) //设置图片在下载前是否重置,复位 resetViewBeforeLoading() //设置下载的图片是否缓存在内存中 cacheInMemory() //设置下载的图片是否缓存在SD卡中 cacheOnDisc() //设置图片的解码类型 bitmapConfig(Bitmap.Config.RGB_565) //设置图片的解码配置 decodingOptions(android.graphics.BitmapFactory.Options decodingOptions) //设置图片下载前的延迟 delayBeforeLoading(int delayInMillis) //设置额外的内容给ImageDownloader extraForDownloader(Object extra) //设置图片加入缓存前,对bitmap进行设置 preProcessor(BitmapProcessor preProcessor) //设置显示前的图片,显示后这个图片一直保留在缓存中 postProcessor(BitmapProcessor postProcessor) //设置图片以如何的编码方式显示 imageScaleType(ImageScaleType imageScaleType)
/** * 设置图片的显示方式 * @param displayer */ displayer(BitmapDisplayer displayer) displayer: RoundedBitmapDisplayer(int roundPixels)设置圆角图片 FakeBitmapDisplayer()这个类什么都没做 FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间 SimpleBitmapDisplayer()正常显示一张图片
/** * 图片的缩放方式 * @param imageScaleType */ imageScaleType(ImageScaleType imageScaleType) imageScaleType: EXACTLY :图像将完全按比例缩小的目标大小 EXACTLY_STRETCHED:图片会缩放到目标大小完全 IN_SAMPLE_INT:图像将被二次采样的整数倍 IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小 NONE:图片不会调整
几点说明:
1).imageScaleType(ImageScaleType imageScaleType) //设置图片的缩放方式,如:
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
其中,mageScaleType的选择值:
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
2).displayer(BitmapDisplayer displayer) // 设置图片的显示方式,如:
.displayer(new FadeInBitmapDisplayer(100))
其中,displayer的选择值:
RoundedBitmapDisplayer(int roundPixels)设置圆角图片,不推荐!!!
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
3.避免OOM
.bitmapConfig(Bitmap.Config.RGB_565) //默认是ARGB_8888,使用RGB_565会比使用ARGB_8888少消耗2倍的内
使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT) 或 imageScaleType(ImageScaleType.EXACTLY)
避免使用.displayer(new RoundedBitmapDisplayer(20)) //他会创建新的ARGB_8888格式的Bitmap对象;
示例:
在Application中设置
File cacheDir = StorageUtils.getOwnCacheDirectory( getApplicationContext(), "loan/ImgCache"); LogManager.d(cacheDir.getPath()); DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true).cacheOnDisk(true).build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( getApplicationContext()) // .memoryCacheExtraOptions(200, 175) // .discCacheExtraOptions(0, 0, CompressFormat.PNG, 70) // .d .memoryCacheSize(1024 * 1024 * 10) // Can slow ImageLoader, use it carefully (Better don't use it) .threadPoolSize(5).threadPriority(Thread.MIN_PRIORITY + 2) .denyCacheImageMultipleSizesInMemory() .diskCache(new LimitedAgeDiscCache(cacheDir, 60 * 60 * 24 * 7)) .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .defaultDisplayImageOptions(options).build(); ImageLoader.getInstance().init(config);在Activity中注体使用情况
DisplayImageOptions.Builder options = new DisplayImageOptions.Builder(); options.cacheOnDisk(true); options.imageScaleType(ImageScaleType.IN_SAMPLE_INT); options.bitmapConfig(Bitmap.Config.RGB_565); ImageLoader.getInstance().displayImage(url img_id_photo, options.build(), new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { showProgressDialog("正在加载中..."); } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { dismissProgressDialog(); showToast("加载失败"); } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { dismissProgressDialog(); } @Override public void onLoadingCancelled(String arg0, View arg1) { dismissProgressDialog(); showToast("取消加载"); } });
相关推荐
**Android-Universal-Image-Loader 图片异步加载库详解** 在Android开发中,图片的加载和显示是一项常见的任务,特别是在处理大量图片或者网络图片时,如何高效、流畅地加载和展示图片至关重要。为此,开发者社区...
**Android-Universal-Image-Loader (UIL) 是一个强大的图片加载、缓存和显示库,专为Android平台设计。这个库被广泛使用,因为它能够高效地处理图片资源,避免内存溢出,同时支持多种加载策略和显示选项。** 在...
4. **universal-image-loader-1.9.3.jar** 这是Android-Universal-Image-Loader的核心库文件,包含了所有必要的类和方法。开发者只需将这个jar包添加到项目的libs目录下,并在项目中引用,即可开始使用UIL的功能。 ...
《Android Universal Image Loader详解:高效异步加载与缓存机制》 在移动应用开发中,尤其是在Android平台上,图片加载和管理是一项重要的任务。高效的图片加载不仅能够提升用户体验,还能优化应用性能,避免内存...
`universal-image-loader-1.9.5.jar` 文件是该库的特定版本,包含所有必要的类和方法,供开发者在项目中引用。只需将此jar包添加到项目的lib目录下,并在代码中引入相关类和方法,即可开始使用Android-Universal-...
Android-Universal-Image-Loader(UIL)是一款广泛应用于Android开发中的图片加载库,它提供了强大的功能,包括异步加载、缓存策略、错误处理以及多种显示选项,使得开发者能够更高效、灵活地处理应用程序中的图像...
《Android-Universal-Image-Loader:高效图片加载与缓存框架解析》 在移动应用开发中,图片加载和缓存是至关重要的环节,特别是在Android平台上,由于设备性能和网络环境的差异,良好的图片管理策略能显著提升用户...
"Android-Universal-Image-Loader"库就是一个强大的解决方案,它专为Android平台设计,用于实现图片的异步加载、缓存和显示,从而提高应用性能并优化用户体验。这个库由Sergey Tarasevich开发,自2011年以来,已经...
**Android-Universal-Image-Loader** 是一个广泛使用的开源库,专为Android应用程序设计,用于高效、异步地加载和缓存网络、本地存储或资源中的图像。它由俄罗斯开发者Denis Zholos创建,旨在解决Android应用在处理...
**Android-Universal-Image-Loader** 是一个强大的开源库,专为Android应用设计,用于高效、灵活地加载、缓存和显示网络上的图片。这个库由Sergey Tarasevich开发,它解决了Android应用程序在处理大量图片时可能出现...
在`Android-Universal-Image-Loader-master`中,我们可以看到项目的源代码结构,包括核心的`library`模块和示例应用`sample`模块。通过对源码的阅读和分析,开发者可以深入理解其工作原理,进一步优化使用。 五、与...