【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 开始相对好点.

具体步骤:

  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 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文件

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

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

当一个maven peoject导入进去

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

你可能感兴趣的:(loader)