昨天在逛CSDN时,偶然看到了一篇文章是关于异步加载图片的,起初也没再留意,后来深入研究了下,感觉相当有用,这就是第三方开源的——UniversalImageLoader,感觉确实是很屌很实用的一种异步加载图片的方法。关于什么是UniversialImageLoader? 也不多说明介绍了。其实现的功能包括,异步实现加载网上资源并显示在指定位置,可设置加载图片的大小和各种参数设置,可为图片在加载前和加载失败后显示默认图片,以及显示加载进度条。更重要的是它不仅仅可以加载网络资源,也可以加载本地如SD卡,assets里的图片资源。挺强大的功能的,具体看一下代码吧,代码都是注释详细的。
package com.example.universalimageloader;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.image);
String imgUrl = "http://pic11.nipic.com/20101130/6320018_113749092512_2.jpg";
ImageSize imageSize = new ImageSize(100, 100); // 定义加载的图片大小
// 显示图片的配置(这里我添加了将图片缓存到内存中已经缓存图片到文件系统中,
// 这样我们就不用担心每次都从网络中去加载图片了)
DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true).cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.showImageOnLoading(R.drawable.ic_launcher) // 图片加载成功前显示的图片
.showImageOnFail(R.drawable.ic_launcher) // 图片加载成功后显示的图片
.build();
/**
* 第一种方式实现载入网上图片资源
*/
/*
* ImageLoader.getInstance().loadImage(imgUrl, new
* ImageLoadingListener() {
*
* @Override public void onLoadingStarted(String arg0, View arg1) { //
* TODO Auto-generated method stub
*
* }
*
* @Override public void onLoadingFailed(String arg0, View arg1,
* FailReason arg2) { // TODO Auto-generated method stub
*
* }
*
* @Override public void onLoadingComplete(String arg0, View arg1,
* Bitmap arg2) { imageView.setImageBitmap(arg2); }
*
* @Override public void onLoadingCancelled(String arg0, View arg1) { //
* TODO Auto-generated method stub
*
* } });
*/
/**
* 第二种方式实现载入网络图片资源
*/
/*
* ImageLoader.getInstance().loadImage(imgUrl, new
* SimpleImageLoadingListener(){
*
* @Override public void onLoadingComplete(String imageUri, View view,
* Bitmap loadedImage) { super.onLoadingComplete(imageUri, view,
* loadedImage); imageView.setImageBitmap(loadedImage); }
*
* });
*/
/**
* 第三种方式实现载入网络图片资源
*/
// ImageLoader.getInstance().displayImage(imgUrl,
// imageView,displayImageOptions);
/**
* 添加具有加载进度条的图片加载
*/
ImageLoader.getInstance().displayImage(imgUrl, imageView,
displayImageOptions, new SimpleImageLoadingListener(),
new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String arg0, View arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
});
/**
* 加载来源于非网络的图片资源(本地图片资源)
*/
/*
* String imagePath = "/mnt/sdcard/image.png"; String imageUrl =
* Scheme.FILE.wrap(imagePath); //图片来源于Content provider String
* contentprividerUrl = "content://media/external/audio/albumart/13";
*
* //图片来源于assets String assetsUrl = Scheme.ASSETS.wrap("image.png");
*
* //图片来源于 String drawableUrl =
* Scheme.DRAWABLE.wrap("R.drawable.image");
* ImageLoader.getInstance().displayImage(imageUrl, imageView,
* displayImageOptions);
*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
同时附上Demo源码下载地址: