Android Imageloader图片异步加载

更新时间:2023-09-30 02:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

更多文档请关注wyu’s blog http://wyu.me

缓存中添加预览图支持,可以从缓存中获取大图的预览图 1.5.1

使用多并发的加载

参考Android SDK guidelines修改SDCARD中的缓存文

件目录

使用LruBitmapCache

Imageloader library使用

从Demo开始相对好点.

具体步骤:

1. 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 ImageManagergetImageManager() { returnimageManager; }

lru缓存设置选项 默认的缓存使用软引用,但是由于系统的内存管理机制、空间限制可能经常被回收掉,限制缓存的性能,lru缓存解决了这个问题,如果你的应用中需要展示很多的小图片建议使用.

settings = new SettingsBuilder()

.withCacheManager(new LruBitmapCache(this)).build(this); thumbnailImageLoader = new ImageManager(this, settings);

更多文档请关注wyu’s blog http://wyu.me

LruBitmapCache默认使用%的内存缓存也可以从构造函数中自行配置 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的时候的加载过程

ImageTagFactoryimageTagFactory = new ImageTagFactory(this, R.drawable.bg_img_loading);

imageTagFactory.setErrorImageId(R.drawable.bg_img_notfound);

privateViewBindergetViewBinder() { return new ViewBinder() { @Override

publicbooleansetViewValue(View view, Cursor cursor, intcolumnIndex) {

// Build image tag with remote image URL ImageTag tag =

imageTagFactory.build(cursor.getString(columnIndex));

更多文档请关注wyu’s blog http://wyu.me

((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不是必须的了)

android:name=\

android:name=\

更多文档请关注wyu’s blog http://wyu.me

缓存预览图片(可选项)

缓存预览图片的这个东西主要是考虑有比较多的图片的时候展示,先加载小兔再加载大图.预览图也可以缓存. 在图片加载之前配置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

ImageViewimageView = (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

添加一个动画 这是动画显示

ImageTagFactoryimageTagFactory = new ImageTagFactory(this, R.drawable.bg_img_loading);

imageTagFactory.setErrorImageId(R.drawable.bg_img_notfound);

更多文档请关注wyu’s blog http://wyu.me

Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_in);

imageTagFactory.setAnimation(fadeInAnimation);

获取Imageloader library的途径: 使用maven

需要在你的pom文件中配置

com.novoda.imageloader imageloader-core 1.5.6 获得一个.jar文件

可以直接引入工程方便使用最新的版本

http://search.maven.org/remotecontent?filepath=com/novoda/imageloader/imageloader-core/1.5.6/imageloader-core-1.5.6.jar

项目结构:

core:maven上的java工程 demo:Android的测试项目

acceptance:添加了Robotium的内部测试工程

使用maven构建工程

mvn clean install

IntelliJ

当一个mavenpeoject导入进去

项目地址:https://github.com/novoda/ImageLoader

更多文档请关注wyu’s blog http://wyu.me

本文来源:https://www.bwwdw.com/article/cfdd.html

Top