【jar包】图片的异步加载--【 Imageloader】
Android Imageloader图片异步加载
Imageloader是一个在android平台下简单的下载、显示、缓存空间的图片加载库.
异步下载网络图片并可以在UI线程更新View,使用二级缓存控制即内存缓存、本地SD卡缓存.
重要更新:
1.5.8-SNAPSHOT
添加加载图片的动画效果
1.5.7
ImageTagFactory 使用工厂方法实现更加方便测试.
本次升级请使用ImageTagFactory.getInstance代替new ImageFactory().
添加图片加载过程中的回调接口,更多的方法请参考SettingsBuilder
添加
修改大量图片展示过程中滚动的一些问题
当URL为null的时候添加错误图片
Fix
for loading images behind redirects (max 3)
1.5.6
clean
up不需要在manifest中注册service,所有的操作在BasicFileManager的线程中完成.
1.5.5
修改bug
添加直接加载图片的DirectLoader(不能在主线程使用)
1.5.2
缓存中添加预览图支持,可以从缓存中获取大图的预览图
1.5.1
使用多并发的加载
参考Android SDK guidelines修改SDCARD中的缓存文件目录
使用LruBitmapCache
Imageloader library使用
从Demo 开始相对好点.
具体步骤:
- in the
application class
添加下列代码初始化Imageloader,SettingsBuilder中提供设置缓存和网络连接的能力.
@Override
public void
onCreate() {
super.onCreate();
LoaderSettings settings = new
SettingsBuilder()
.withDisconnectOnEveryCall(true).build(this);
imageManager = new ImageManager(this,
settings);
}
public static
final ImageManager getImageManager() {
return imageManager;
}
lru缓存设置选项
默认的缓存使用软引用,但是由于系统的内存管理机制、空间限制可能经常被回收掉,限制缓存的性能,lru缓存解决了这个问题,如果你的应用中需要展示很多的小图片建议使用.
settings = new
SettingsBuilder()
.withCacheManager(new
LruBitmapCache(this)).build(this);
thumbnailImageLoader = new ImageManager(this, settings);
LruBitmapCache默认使用%25的内存缓存也可以从构造函数中自行配置
int
PERCENTAGE_OF_CACHE = 50;
settings = new
SettingsBuilder()
.withCacheManager(new LruBitmapCache(this,
PERCENTAGE_OF_CACHE)).build(this);
thumbnailImageLoader = new ImageManager(this, settings);
其他设置
Imageloader使用UrlConnection获取图片,两个重要的请求的参数需要配置一下connectionTimeout & readTimeout
SettingsBuilder
builder = new SettingsBuilder();
Settings
settings = builder.withConnectionTimeout(20000)
.withReadTimeout(30000).build(this);
连接超时的时间是初始化连接的时间
读取超时是说已经建立连接获取数据的时间
在Acitivty,fragment
或Adapter中使用
如果想在imageview中加载图片只需要调用的Application的静态方法获得Imageloader再调用其中的load方法
下面的代码是Imageview是一个tag的时候的加载过程
ImageTagFactory
imageTagFactory = new ImageTagFactory(this, R.drawable.bg_img_loading);
imageTagFactory.setErrorImageId(R.drawable.bg_img_notfound);
private
ViewBinder getViewBinder() {
return new ViewBinder() {
@Override
public boolean setViewValue(View view,
Cursor cursor, int columnIndex) {
// Build image tag with remote image URL
ImageTag tag = imageTagFactory.build(cursor.getString(columnIndex));
((ImageView) view).setTag(tag);
imageLoader.load(view);
return true;
}
};
}
使用ImageTagFactory配置图片的显示的大小同时开始显示原图.Imageloader将依次从内存缓存,sdcard,网络获取
清空SDCARD缓存
如果需要清空SDCARD缓存调用
imageManager.getFileManager().clean();
Imageloader的初始化过程中可以使用settings
builder配置缓存的过期时间(默认时间为7天)
In the Androidmanifest.xml
主要是声明两件事情:权限和注册清空缓存的service(从1.5.6以后清空sdcard缓存的service不是必须的了)
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<service
android:name="com.novoda.imageloader.core.service.CacheCleaner"
android:exported="true">
<intent-filter>
<action
android:name="com.novoda.imageloader.core.action.CLEAN_CACHE" />
</intent-filter>
</service>
缓存预览图片(可选项)
缓存预览图片的这个东西主要是考虑有比较多的图片的时候展示,先加载小兔再加载大图.预览图也可以缓存.
在图片加载之前配置image tag或配置ImageTagFactory
// Image tag
after normal settings
imageTag.setPreviewHeight(100);
imageTag.setPreviewHeight(100);
imageTag.setPreviewUrl(previewUrl);
imageView.setTag(imageTag);
getImageManager().getLoader().load(imageView);
// If small and
large image have same URL, configure with the ImageTagFactory
imageTagFactory
= new ImageTagFactory(this, R.drawable.loading);
imageTagFactory.setErrorImageId(R.drawable.image_not_found);
imageTagFactory.usePreviewImage(THUMB_IMAGE_SIZE,
THUMB_IMAGE_SIZE, true);
// On bind
ImageView
imageView = (ImageView) view;
String url =
cursor.getString(columnIndex);
imageView.setTag(imageTagFactory.build(url));
MyApplication.getImageManager().getLoader().load(imageView);
DirectLoader
ImageLoader提供直接通过url下载的图片的工具类,调用该方法请使用非UI线程
Bitmap myImage = new DirectLoader().download(url);
如果没有找到图片改方法会抛出ImageNotFoundException
添加一个动画
这是动画显示
ImageTagFactory
imageTagFactory = new ImageTagFactory(this, R.drawable.bg_img_loading);
imageTagFactory.setErrorImageId(R.drawable.bg_img_notfound);
Animation
fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
imageTagFactory.setAnimation(fadeInAnimation);
获取Imageloader
library的途径:
使用maven
需要在你的pom文件中配置
<dependency>
<groupId>com.novoda.imageloader</groupId>
<artifactId>imageloader-core</artifactId>
<version>1.5.6</version>
</dependency>
获得一个.jar文件
可以直接引入工程方便使用最新的版本
项目结构:
core:maven上的java工程
demo:Android 的测试项目
acceptance:添加了Robotium的内部测试工程
使用maven构建工程
mvn clean install
IntelliJ
当一个maven
peoject导入进去
项目地址: https://github.com/novoda/ImageLoader
【jar包】图片的异步加载--【 Imageloader】的更多相关文章
- Android中图片的异步加载
转: 1. 为什么要异步加载图片 下载图片比较费时,先显示文字部分,让加载图片的过程在后台,以提升用户体验 2. SoftReference的作用 栈内存—引用 堆内存—对象 Eg: Object ...
- WPF技术触屏上的应用系列(五): 图片列表异步加载、手指进行缩小、放大、拖动 、惯性滑入滑出等效果
原文:WPF技术触屏上的应用系列(五): 图片列表异步加载.手指进行缩小.放大.拖动 .惯性滑入滑出等效果 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统, ...
- BitmapImage处理网络图片,例如阿里云获取的图片。异步加载到需要显示的控件上。提升速度非常明显。
想直接把网络图片赋给控件,又要下载又要缓存,速度非常慢.不流畅. 需要进行处理,异步加载会显著提升速度.方法如下: public static BitmapImage ByteArrayToBitma ...
- gridcontrol 图片列异步加载
在gridview中指定一列,将ColumnEdit设置成pictureEdit 在使用showDialog这里窗体后,需要frm.Dispose()将资源释放 1.将该列的UnboundType属性 ...
- android图片的异步加载和双缓存学习笔记——DisplayImageOptions (转)
转的地址:http://hunankeda110.iteye.com/blog/1897961 1 //设置图片在下载期间显示的图片 2 showStubImage(R.drawable.ic_lau ...
- 关于使用uitableview 中cell 来实现uiimageview的复用和图片的异步加载
apple sample lazytableimages 1,首先设置横向显示的uitableview self.customTableview.transform = CGAffineTransfo ...
- tomcat的添加及jar包和jQuery的加载
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- Android图片异步加载
原:http://www.cnblogs.com/angeldevil/archive/2012/09/16/2687174.html 相关:https://github.com/nostra13/A ...
随机推荐
- Java多线程的~~~synchronized加入参数,以实现独立片段
有时候,我们不希望在整个方法的前面加上synchronized这个keyword.这将使整个方法调用变得缓慢,我们只是重点 代码的地方添加这个synchronized这个keyword,然后这样就能加 ...
- Group By去除重复数据
今天在写一个sql,目的是去除表里某一个字段相同的数据,只保留最新的一条.之前group by 用的少.特此记录一下. SELECT * FROM litb_approval_task SELECT ...
- Oracle 修改字符集
出现ORA-12899,是字符集引起的,中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,而源dmp文件字符集是ZHS16GBK库里倒出来的数据,现在要导入到目标字符集为UTF-8的库里,所 ...
- 【从翻译mos文章】oracle linux 和外部存储系统 关系
oracle linux 和外部存储系统 关系 参考原始: Oracle Linux and External Storage Systems (Doc ID 753050.1) 范围: Linux ...
- Android 阅读Manifest在文件Application 在与其他节点meta-data定义自己的数据
介绍 Android提供meta-date使用键值在实现自己的自定义配置的形式. 通常用作信道标识.它可以用在<application>,<activity>,<acti ...
- MAC使用小技巧(二)
一.Safari-->广告数量不足 --原因:DNS被拦截,被恶意推送广告. ----------------------------- [ 思路 ] 修改hosts文件 $ cd /etc $ ...
- OpenVPN多处理之-最新架构
好久没有更新这个系列了,由于我之前也说过,前段时间实在太忙了,并且早在一个月前就预示着本月将更加忙!事实也确实如此!最终在国庆前夕完毕了既定的计划,心里也最终能够长出一口气了.近期在忙什么呢?事实上就 ...
- Excel 删除所有错误公式
当前工作表的话可以F5-定位-公式-错误值 来选中所有含错误值的单元格,然后按delete删除. 多表的话没办法了,因为不能跨工作表多重选中,只能一页页的删,或者用vba编个宏来解决
- struts2的Action该方法不能去
最近做的一个特征,使用struts2,input标签内容,并与相应的内容背景的实体类,当提交方法,无法进入action该方法和程序没有报错被,检验N通方法还没有找到,查找终于找到了,它是input标签 ...
- TCP通信中的大文件传送
TCP通信中的大文件传送 源码 (为节省空间,不包含通信框架源码,通信框架源码请另行下载) 文件传送在TCP通信中是经常用到的,本文针对文件传送进行探讨 经过测试,可以发送比较大的文件,比如1个G ...