首页 > 其他 > 详细

使用ImageLoader实现图片异步加载

时间:2016-07-06 02:06:20      阅读:378      评论:0      收藏:0      [点我收藏+]

我们在加载大量的网络图片的时候,采用的方式不妥当的时候,经常会出现内存溢出的现象,导致程序崩溃,还有加载图片速度慢等一些问题。ImageLoader图片加载核心类,内部使用线程池加载图片灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;对加载过程实现监听和事件处理;能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等好处可以基本上解决以上问题!

1.官方网站下载最新的包,universal-image-loader-1.8.4.jar加入到你项目的libs里面,注意引入项目,点击你的项目,右键——选择build path——configure build path——add jars,选择你项目下面libs里面的包。
?
2.配置Manifest文件,因为要进行网络请求和本地缓存,添加网络请求和访问外部存储的权限
?
<uses-permission android:name="android.permission.INTERNET" /> ?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />??
?
3.
public class MyApplication extends Application {

????@Override

????public void onCreate() {

????????super.onCreate();

//没有緩存的配置:

ImageLoaderConfiguration?config=new ImageLoaderConfiguration.Builder(getApplicationContext())

?? ??? ??? ??? ?.threadPriority(Thread.NORM_PRIORITY - 2)

?? ??? ??? ??? ?.denyCacheImageMultipleSizesInMemory()

?? ??? ??? ??? ?.discCacheFileNameGenerator(new Md5FileNameGenerator())

?? ??? ??? ??? ?.tasksProcessingOrder(QueueProcessingType.LIFO)

?? ??? ??? ??? ?.enableLogging() // Not necessary in common ??

?? ??? ??? ??? ?.build();

?

//有緩存的配置:

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()

?? ???????? .cacheInMemory() ?

?? ???????? .cacheOnDisc() ???

?? ???????? .build();

?? ??? ? ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

? ? ? ? ????.defaultDisplayImageOptions(defaultOptions)

?? ??? ??? ?.threadPriority(Thread.NORM_PRIORITY - 2)

?? ??? ??? ?.denyCacheImageMultipleSizesInMemory()

?? ??? ??? ?.discCacheFileNameGenerator(new Md5FileNameGenerator())

?? ??? ??? ?.tasksProcessingOrder(QueueProcessingType.LIFO)

?? ??? ??? ?.enableLogging()

?? ??? ??? ?.build();

?

?? ??? ?ImageLoader.getInstance().init(config);

}

}

配置完成后,我们就可以在任何想用它的地方使用了。具体使用如下:

1.???ImageLoader.getInstance().displayImage(url, ImageView);?

2.???DisplayImageOptions??options?= new DisplayImageOptions.Builder()
? ? ? ? ? ? .showStubImage(R.drawable.ic_stub) ? ? ? ? ? ? //加载开始默认的图片??????
? ? ? ? ? ? .showImageForEmptyUri(R.drawable.ic_empty)?????//url爲空會显示drawable里面的图片
? ? ? ? ? ? .showImageOnFail(R.drawable.ic_error) ? ? ? ? ?//加载图片出现问题,会显示此图片
? ? ? ? ? ? .cacheInMemory() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //缓存用
? ? ? ? ? ? .cacheOnDisc() ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//缓存用

? ? ? ??.imageScaleType(ImageScaleType.IN_SAMPLE_INT)?

?

? ? ? ? .bitmapConfig(Bitmap.Config.RGB_565) ? ? ? ? ? // 防止内存溢出的,图片太多用这个

? ? ? ? .displayer(new RoundedBitmapDisplayer(5)) ? ? ?//图片圆角显示,值为整数
? ? ? ? ? ? .build();

??????ImageLoader.getInstance().displayImage(url, imageView,options);?

3.ImageLoader.getInstance().loadImage(url,new SimpleImageLoadingListener(){
? ? ? ? ? public void onLoadingComplete(String imageUri, android.view.View view, ? ? ? ? ? ? ? android.graphics.Bitmap loadedImage) {
? ? ? ? ? ?imageView.setImageBitmap(loadedImage); ? ? ? ? ?//imageview控件对象
? ? ? ? };


? ? ? ? ?public void onLoadingFailed(String imageUri, android.view.View view, com.nostra13.universalimageloader.core.assist.FailReason failReason) {
? ? ? ? ? Toast.makeText(ShowOneImage.this,"加载失败", Toast.LENGTH_LONG).show();
? ? ? ? };
? ? ? ? @Override
? ? ? ? public void onLoadingStarted(String imageUri, View view) {
? ? ? ? ? ??
? ? ? ? }
? ? ? ? @Override
? ? ? ? public void onLoadingCancelled(String imageUri, View view) {


? ? ? ? }
});

?

参考文档:http://my.oschina.net/u/1858156/blog/338854

?

使用ImageLoader实现图片异步加载

原文:http://18565891643.iteye.com/blog/2307862

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!