使用Universal-Image-Loader框架加载图片
Github下载地址:http://github.com/nostra13/Android-Universal-Image-Loader
下载后,新建工程,将jar导入到工程的libs目录中。
加载网络图片
1、初始化ImageLoader
新建类继承Application,在Application的onCreate()方法中初始化ImageLoader
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); //1、创建使用默认参数的ImageLoaderConfiguration
/* ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions()
.diskCacheExtraOptions()
.taskExecutor()
.taskExecutorForCachedImages()
.threadPoolSize()
.threadPriority()
.tasksProcessingOrder()
.denyCacheImageMultipleSizesInMemory()
.memoryCache()
.memoryCacheSize()
.memoryCacheSizePercentage()
.diskCache()
.diskCacheSize()
.diskCacheFileCount()
.diskCacheFileNameGenerator()
.imageDownloader()
.imageDecoder().defaultDisplayImageOptions()
.writeDebugLogs()
.build(); //2、设置ImageLoaderConfiguration的其他参数*/
ImageLoader.getInstance().init(configuration);
}
上面的第一种为创建使用默认参数的ImageLoaderConfiguration,若要配置ImageLoaderConfiguration的其他参数,可以使用第二种方法来设置
例如要自定义图片的缓存目录,可以这样初始化ImageLoaderConfiguration:
File cacheDir = StorageUtils.getOwnCacheDirectory(this, "sdcard/BitmapCache");
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).diskCache(new UnlimitedDiskCache(cacheDir)).build();
ImageLoader.getInstance().init(configuration);
这样,缓存的图片会放在SD卡的BitmapCache目录下
2、修改AndroidManifest文件中的application名称为自定义的Application
<application
android:name=".MyApplication" //自定义Application类
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
</application>
3、加载图片
有两种方法可以加载图片,分别是loadImage()和displayImage(),下面将分别用这两种方法来加载
- 使用loadImage()加载图片
ImageLoader.getInstance().loadImage(uri, listener);
ImageLoader.getInstance().loadImage(uri, options, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, options, listener);
ImageLoader.getInstance().loadImage(uri, targetImageSize, options, listener, progressListener)
参数含义:
uri:所要加载图片的地址
listener:ImageLoadingListener对象
targetImageSize:限定图片加载的尺寸大小
options:DisplayImageOptions实例,可以配置图片加载的选项
progressListener:ImageLoadingProgressListener对象,监听图片加载进度
实现加载图片:
ImageLoader.getInstance().loadImage(uri, 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) {
// TODO Auto-generated method stub
//图片加载完成后,显示图片
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
// TODO Auto-generated method stub
}
});
SimpleImageLoadingListener实现了ImageLoadingListener接口,对其中的方法提供了空实现,若要实现其中的部分方法,可以在loadImage()方法中传入SimpleImageLoadingListener
使用DisplayOptions配置图片选项:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true) //设置内存缓存
.cacheOnDisk(true).build(); //设置磁盘缓存
ImageLoader.getInstance().loadImage(uri, options, new SimpleImageLoadingListener() {
//要实现的方法
});
使用displayImage()加载图片
使用displayImage()加载图片时,只需将DisplayImageOptions配置好后传入
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.loading_drawble) //设置占位图片
.showImageOnFail(R.drawable.fail_drawble) //设置加载失败后显示的图片
.cacheInMemory(true)
.cacheOnDisk(true).build();
ImageLoader.getInstance().displayImage(uri, imageView, options);
监听图片加载进度:
ImageLoader.getInstance().displayImage(uri, imageView, options, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String arg0, View arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
//可以在这里显示图片加载进度
}
});
加载本地图片
ImageLoader可以加载网络图片,也可以加载本地图片,区别在于加载时传入的uri不同
加载本地文件存储中的图片:
String uri = “file:///sdcard/image.png”;
String uri = Schema.FILE.wrap(“sdcard/image.png”);
加载drawable目录下的图片:
String uri = “drawable://” + R.drawable.image
String uri = Schema.FILE.wrap(R.drawable.image + “”) //此处要特别注意,使用wrap方法时,里面的参数为资源id的字符串形式,可以使用R.drawable.image + “”或String.valueOf(R.drawable.image)
加载assets目录下的图片:
String uri = “assets://image.png”;
String uri = Scheme.ASSETS.wrap(“image.png”);
加载来自ContentProvider的图片:
String uri = “content://media/external/images/media/13”