您的位置:首页 > 理论基础 > 计算机网络

android 图片网络下载github开源框架之Universal-Image-Loader

2015-04-14 12:08 429 查看
最近在做妙趣剪纸项目,剪纸应用项目链接。发扬传统文化,大家多多关注。

需要自己搭建服务器,我用的是新浪sae,简直秒杀京东云几条街,把图片放在网上下载,但是图片经常下载要遇到很多问题,包括oom等。所以研究了一下这个框架。

1.Universal-Image-Loader应用广泛,github地址

2.说说这个项目的优点:

(1)首先这个工具能够获取各个途径的图片,包括网络,文件,asserts,以及provider等。

(2)这个工具对网络下载进行了优化,能够自动实现内存和文件的缓存。

(3)这个工具能够对图片获取的全称进行监控跟踪。

3.这个工具怎么使用?

(1)首先github上面下载,然后把其中的jar包导入。

(2)写一个类实现Application,然后把application在manifest中的application标签中注册,由于application是单例,经常用来初始化一些变量。在oncreate()方法中,创建ImageLoader的配置参数,我们采取的是默认,只有设置了配置参数后才可以使用ImageLoader,不然会报错。只有yo代码如下:

public class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = ImageLoaderConfiguration
.createDefault(this);

//Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(configuration);
}

}


(3)ImageLoader单例模式,有两个主要的方法displayImage(), loadImage(),。分别介绍如下:

loadImage()的相关代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";
ImageSize mImageSize = new ImageSize(100, 100);

//显示图片的配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();

ImageLoader.getInstance().loadImage(imageUrl, mImageSize, options, new SimpleImageLoadingListener(){

@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
mImageView.setImageBitmap(loadedImage);
}

});


其中,ImageSize 这个用来在设置图片的饿大小。

DisplayImageOptions这个类用来对设置图片的加载,比如上例设置缓存在内存和文件中。

如果要对全称进行监控,最后一个参数可以实现ImageLoadingListener方法;代码如下:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";

ImageLoader.getInstance().loadImage(imageUrl, 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) {
mImageView.setImageBitmap(loadedImage);
}

@Override
public void onLoadingCancelled(String imageUri, View view) {

}
});


displayImage()方法示例代码:

final ImageView mImageView = (ImageView) findViewById(R.id.image);
String imageUrl = "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg";

//显示图片的配置
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();

ImageLoader.getInstance().displayImage(imageUrl, mImageView, options);


displayImage方法可以自动裁剪图片匹配控件。

5.可以打印图片加载过程:

代码如下:

public class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();

//创建默认的ImageLoader配置参数
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.writeDebugLogs() //打印log信息
.build();

//Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(configuration);
}

}




6.我们在加载网络图片的时候,经常有需要显示图片下载进度的需求,Universal-Image-Loader当然也提供这样的功能,只需要在displayImage()方法中传入ImageLoadingProgressListener接口就行了,代码如下

imageLoader.displayImage(imageUrl, mImageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {

@Override
public void onProgressUpdate(String imageUri, View view, int current,
int total) {

}
});


8.哈可以加载其他途径的代码:

String imagePath = "/mnt/sdcard/image.png";
String imageUrl = Scheme.FILE.wrap(imagePath);
String contentprividerUrl = "content://media/external/audio/albumart/13";

//图片来源于assets
String assetsUrl = Scheme.ASSETS.wrap("image.png");

//图片来源于
String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");


需要像上面那样,包裹一下。

9.相信大部分人都是使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式

[java] view plaincopy在CODE上查看代码片派生到我的代码片

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));


第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载

10.总结:

loadImage()方法主要通过回调ImageLoadingListener的onLoadingComplete方法,来显示图片。

diaplayImage()方法吧ImageView作为参数传进去,对iamgeView的是若引用,方便垃圾回收,并且可以根据控件的width和height属性,对土拍进行裁剪。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐