Android开源库--Universal Image Loader通用图片加载器
如果说我比别人看得更远些,那是因为我站在了巨人的肩上。
介绍:

特点:
设置:
<manifest><!-- Include following permission if you load images from Internet --><uses-permissionandroid:name="android.permission.INTERNET"/><!-- Include following permission if you want to cache images on SD card --><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>...</manifest>
publicclassMyActivityextendsActivity{@Overridepublicvoid onCreate(){super.onCreate();// Create global configuration and initialize ImageLoader with this configImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(this)....build();ImageLoader.getInstance().init(config);...}}
- ImageLoader Configuration (ImageLoaderConfiguration) 对应用来说是全局的.
- Display Options (DisplayImageOptions) 对每一个显示作业都是本地的 (ImageLoader.displayImage(...)).
// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.// See the sample project how to use ImageLoader correctly.File cacheDir =StorageUtils.getCacheDirectory(context);ImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(480,800)// 默认 = 设备屏幕大小.diskCacheExtraOptions(480,800,null).taskExecutor(...).taskExecutorForCachedImages(...).threadPoolSize(3)// default.threadPriority(Thread.NORM_PRIORITY -2)// default.tasksProcessingOrder(QueueProcessingType.FIFO)// default.denyCacheImageMultipleSizesInMemory().memoryCache(newLruMemoryCache(2*1024*1024)).memoryCacheSize(2*1024*1024).memoryCacheSizePercentage(13)// default.diskCache(newUnlimitedDiscCache(cacheDir))// default.diskCacheSize(50*1024*1024).diskCacheFileCount(100).diskCacheFileNameGenerator(newHashCodeFileNameGenerator())// default.imageDownloader(newBaseImageDownloader(context))// default.imageDecoder(newBaseImageDecoder())// default.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default.writeDebugLogs().build();
// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.// See the sample project how to use ImageLoader correctly.DisplayImageOptions options =newDisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub)// resource or drawable.showImageForEmptyUri(R.drawable.ic_empty)// resource or drawable.showImageOnFail(R.drawable.ic_error)// resource or drawable.resetViewBeforeLoading(false)// default.delayBeforeLoading(1000).cacheInMemory(false)// default.cacheOnDisk(false)// default.preProcessor(...).postProcessor(...).extraForDownloader(...).considerExifParams(false)// default.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)// default.bitmapConfig(Bitmap.Config.ARGB_8888)// default.decodingOptions(...).displayer(newSimpleBitmapDisplayer())// default.handler(newHandler())// default.build();
使用:
示例:
//加载图片,解码成bitmap并且在ImageView显示(或者任何实现了ImageAware接口的View)
imageLoader.displayImage(imageUri, imageView);
// 加载图片,解码成bitmap并且以回调的形式返回bitmap
imageLoader.loadImage(imageUri,newSimpleImageLoadingListener(){
@Override
publicvoid onLoadingComplete(String imageUri,View view,Bitmap loadedImage){
// Do whatever you want with Bitmap
}
});
// 加载图片,解码成bitmap并且同步返回bitmap
Bitmap bmp = imageLoader.loadImageSync(imageUri);
完整的
// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view
// which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView, options,newImageLoadingListener(){
@Override
publicvoid onLoadingStarted(String imageUri,View view){
...
}
@Override
publicvoid onLoadingFailed(String imageUri,View view,FailReason failReason){
...
}
@Override
publicvoid onLoadingComplete(String imageUri,View view,Bitmap loadedImage){
...
}
@Override
publicvoid onLoadingCancelled(String imageUri,View view){
...
}
},newImageLoadingProgressListener(){
@Override
publicvoid onProgressUpdate(String imageUri,View view,int current,int total){
...
}
});
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize =newImageSize(80,50);// 返回的图片将以被调整成该大小
imageLoader.loadImage(imageUri, targetSize, options,newSimpleImageLoadingListener(){
@Override
publicvoid 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 =newImageSize(80,50);// result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);
注意:
// Create default options which will be used for every// displayImage(...) call if no options will be passed to this methodDisplayImageOptions defaultOptions =newDisplayImageOptions.Builder()....cacheInMemory(true).cacheOnDisk(true)....build();ImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(getApplicationContext())....defaultDisplayImageOptions(defaultOptions)....build();ImageLoader.getInstance().init(config);// Do it on Application start// Then later, when you want to display imageImageLoader.getInstance().displayImage(imageUrl, imageView);// Default options will be used
DisplayImageOptions options =newDisplayImageOptions.Builder()....cacheInMemory(true).cacheOnDisk(true)....build();ImageLoader.getInstance().displayImage(imageUrl, imageView, options);// Incoming options will be used
- 获取ImageView实际测量的width和height。
- 获取android:layout_width 和android:layout_height 参数。
- 获取android:maxWidth 和/或 android:maxHeight 参数。
- 从configuration (memoryCacheExtraOptions(int, int) option)获取最大的width 和/或 height 参数。
- 获取设备屏幕的width和/或height
- 禁止内存缓存,如果依然OOM,那么检查你的APP是否存在内存泄露,使用MemoryAnalyzer检测一下。
- 在configuration配置中减少线程池大小(.threadPoolSize(...)). 建议在1 - 5 之间。
- 在display options中使用.bitmapConfig(Bitmap.Config.RGB_565)。Bitmaps在RGB_565下比ARGB_8888消耗少2被的内存。
- 使用.imageScaleType(ImageScaleType.EXACTLY)
- 在configuration配置中使用.diskCacheExtraOptions(480, 320, null)。
- 仅使用强引用的Cache缓存:
- LruMemoryCache (当超过缓存大小时,删除最近最少使用的bitmap) - 默认使用
- 使用弱和强引用的缓存:
- UsingFreqLimitedMemoryCache (当超过缓存大小时,删除最不经常使用的bitmap)
- LRULimitedMemoryCache (当超过缓存大小时,删除最近最少使用的bitmap)
- FIFOLimitedMemoryCache (当超过缓存大小时,最先缓存的bitmap先删除。)
- LargestLimitedMemoryCache (当超过缓存大小时,最大的Bitmap先删除。)
LimitedAgeMemoryCache(通过装饰,超过设置时限的bitmap将被删除)- 仅使用弱引用的缓存:
- WeakMemoryCache (无限制缓存)
- UnlimitedDiscCache (最快的缓存, 没有限制缓存大小) - 默认使用。
- LruDiskCache (通过文件数量和最大缓存大小来限制缓存. 如果超过了限制,将会删除最近最少使用的文件)
- LimitedAgeDiscCache (没有大小限制,但有时间限制的缓存. 如果时间超过了设定值,文件将被删除)
- RoundedBitmapDisplayer (显示带有圆角的图片)
- FadeInBitmapDisplayer (显示带有淡入动画的图片)
boolean pauseOnScroll =false;// or trueboolean pauseOnFling =true;// or falsePauseOnScrollListener listener =newPauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);listView.setOnScrollListener(listener);
Android开源库--Universal Image Loader通用图片加载器的更多相关文章
- Android中用URL模拟一个简单的图片加载器
首先,需要添加权限. <uses-permission android:name="android.permission.INTERNET"/> 整体代码如下: pac ...
- 通用图片加载组件UniversalImageLoader
通用图片加载组件UniversalImageLoader UniversalImageLoader是一款通用图片加载组件.该组件支持多种图片来源,如网络.SD卡.Assets文件夹等.在网络请求的 ...
- 14. Android框架和工具之 ImageLoader(图片加载)
1. 这个图片加载框架网友很多都已经使用过,而且分析也很到位,这里我就不写了,直接引用别人,尊重别人的劳动成果. 2. 参考如下: (1)Android 开源框架Universal-Image-Loa ...
- Android 框架修炼-自己开发高效异步图片加载框架
一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ...
- CI框架 -- 核心文件 之 Loader.php(加载器)
顾名思义,装载器就是加载元素的,使用CI时,经常加载的有: 加载类库文件:$this->load->library() 加载视图文件:$this->load->view() ...
- 操作系统的 (program)loader(程序加载器)
在计算机科学中,加载器(也叫程序加载器)属于操作系统的一部分,用于加载程序(programs)和库(libraries).加载器是执行程序和代码必不可少的组件,正是它负责将程序送入内存,为程序的运行提 ...
- 高性能异步图片加载器的JS库:lazysizes
<script src="lazysizes.min.js" async=""></script> 使用示例 <!-- non-r ...
- Module loader:模块加载器
<p data-height="265" data-theme-id="0" data-slug-hash="XpqRmq" data ...
- Android Fresco (Facebook开源的图片加载管理库)
Fresco是Facebook开源的一个图片加载和管理库. 这里是Fresco的GitHub网址. 同类型的开源库市面有非常多,比如Picasso, Universal Image Loader, G ...
随机推荐
- 华农js抢课神器
又到了华农选课的时候,服务器估计就受不了,每天奔溃几次,这次选课贪心了点,竟然选了5门,好吧,我承认我只中了1门,什么??刚刚换课给同学马上就被人抢了?我来告诉你原因吧,最近发现一位大神写了一份js脚 ...
- WCF服务中,[DataMember]属性标记的属性一定要有set访问器
WCF服务中,如果实体类中,包含有[DataMember]属性标记时,该属性一定要有set访问器.当系统必须调用到[DataMember]标记的属性时,如果该属性没有set访问器,则会出错.
- C# 中的 == 和 equals()有什么区别?
如以下代码: 1 2 3 4 5 6 7 8 9 int age = 25; short newAge = 25; Console.WriteLine(age == newAge); //t ...
- ZOJ3717 Balloon(2-SAT)
一个很玄乎的问题,但听到2-SAT之后就豁然开朗了.题目的意思是这样的,给你n个点群,每个点群里面有两个点,你要在每个点群里面选一个点,以这些点做半径为r的圆,然后r会有一个最大值,问的就是怎么选这些 ...
- (转)c语言随机数srandom( )
转自:http://zhidao.baidu.com/question/334364810.html调用随机数函数 rand()() 的时候, 实际得到的这个随机数并不是绝对随机的,它是以一个初始值, ...
- POJ 1455
/* 冒泡排序n*(n-1)/2; */ #include <iostream> using namespace std; int main() { //freopen("acm ...
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- shell如何自动输入密码
shell如何自动输入密码 http://linux.ctocio.com.cn/171/12162171.shtml
- POJ 3177 Redundant Paths(Tarjan)
题目链接 题意 : 一个无向连通图,最少添加几条边使其成为一个边连通分量 . 思路 :先用Tarjan缩点,缩点之后的图一定是一棵树,边连通度为1.然后找到所有叶子节点,即度数为1的节点的个数leaf ...
- POJ 3034 Whac-a-Mole(DP)
题目链接 题意 : 在一个二维直角坐标系中,有n×n个洞,每个洞的坐标为(x,y), 0 ≤ x, y < n,给你一把锤子可以打到地鼠,最开始的时候,你可以把锤子放在任何地方,如果你上一秒在( ...