android开源框架Android-Universal-Image-Loader

android开源框架Android-Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性:

(1)多线程加载图像(异步或同步);

(2)高度可定制化imageloader配置(线程池、图片下载器、解码器、内存和磁盘缓存、显示图像选项等);

(3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等);

(4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡);

(5)监听加载过程(包括下载进度);


android开源框架Android-Universal-Image-Loader_第1张图片


下来我们详解如何配置使用Android-Universal-Image-Loader来加载网络图片

首先我们导入universal-image-loader.jar,然后Add to Build Path、开始初始化工作

1.在Application的onCreate中初始化ImageLoader

import android.app.Application;
import android.content.Context;
import android.os.Handler;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;

public class MyApplication extends Application{
	/**
	 * app的入口函数
	 */
	@Override
	public void onCreate() {
		super.onCreate();

		initImageLoader(this);
	}
	
	public static void initImageLoader(Context context) {
		// This configuration tuning is custom. You can tune every option, you may tune some of them,
		// or you can create default configuration by
//		  ImageLoaderConfiguration.createDefault(this);
		// method.
		ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
		config.threadPriority(Thread.NORM_PRIORITY - 2);
		config.denyCacheImageMultipleSizesInMemory();//不会在内存中缓存多个大小的图片
		config.diskCacheFileNameGenerator(new Md5FileNameGenerator());//为了保证图片名称唯一
		config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
		//内存缓存大小默认是:app可用内存的1/8
		config.tasksProcessingOrder(QueueProcessingType.LIFO);
		config.writeDebugLogs(); // Remove for release app

		// Initialize ImageLoader with configuration.
		ImageLoader.getInstance().init(config.build());
//		ImageLoader.getInstance().init( ImageLoaderConfiguration.createDefault(this));
	}
}

2.在AndroidManifest中配置Application

<application
        android:allowBackup="true"
        android:name="com.example.imageloader.global.MyApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

3.在MyImageApadter中加载图片

(1)初始化DisplayImageOptions(为了方便使用,我们将其抽取成一个类)

import android.graphics.Bitmap;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

/**
 * Android-Universal-Image-Loader-master 框架 options参数
 * @author smartbetter
 * 
 */
public interface ImageLoaderOptions {
	DisplayImageOptions options = new DisplayImageOptions.Builder() 
			.showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片
			.showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片
			.showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片
			.cacheInMemory(true)// 在内存中缓存该图片
			.cacheOnDisk(true)// 在硬盘中缓存该图片
			.imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高
			.bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的
			.considerExifParams(true)// 会识别图片的方向信息
			// .displayer(new FadeInBitmapDisplayer(800)).build();//渐渐显示的动画效果
			.displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果

	// 显示大图的options
	DisplayImageOptions pager_options = new DisplayImageOptions.Builder()
			.showImageOnLoading(R.drawable.ic_default)// 加载图片过程中显示哪张图片
			.showImageForEmptyUri(R.drawable.ic_default)// url为空的话显示哪张图片
			.showImageOnFail(R.drawable.ic_default)// 加载图片失败显示哪张图片
			.cacheInMemory(false)// 不在内存中缓存该图片
			.cacheOnDisk(true)// 在硬盘中缓存该图片
			.imageScaleType(ImageScaleType.EXACTLY)// 将会对图片进一步缩放,缩放的程度参考ImageVIew的宽高
			.bitmapConfig(Bitmap.Config.RGB_565)// 该种渲染模式也是比较节省内存的
			.considerExifParams(true)// 会识别图片的方向信息
			.displayer(new FadeInBitmapDisplayer(500)).build();// 渐渐显示的动画效果
	// .displayer(new RoundedBitmapDisplayer(28)).build();// 圆角的效果
	
}

(2)在getView方法中调用加载图片

/**
 * ImageLoader.getInstance().displayImage(uri, imageView);  
 * ImageLoader.getInstance().displayImage(uri, imageView, options);  
 * ImageLoader.getInstance().displayImage(uri, imageView, listener);  
 * ImageLoader.getInstance().displayImage(uri, imageView, options, listener);  
 * ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);  
 * 参数解析:
 * 		imageUrl : 图片的URL地址  
 * 		imageView : 显示图片的ImageView控件    
 * 		options : DisplayImageOptions配置信息   
 * 		listener : 图片下载情况的监听  
 * 		progressListener : 图片下载进度的监听  
 */
//加载图片
ImageLoader.getInstance().displayImage(Url.IMAGE, holder.iv_icon, ImageLoaderOptions.options);

-->拓展

渐渐显示的动画效果和圆角的效果不能同时设置,解决方法:我们在(1)中设置圆角效果,然后舍弃(2)的方法加载图片,而采用下面方法,到此,我们鱼与熊掌兼得。

//加载图片
ImageLoader.getInstance().displayImage(Url.IMAGE,holder.iv_icon, options
		,new SimpleImageLoadingListener(){
	@Override
	public void onLoadingComplete(String imageUri, View view,
			Bitmap loadedImage) {
		super.onLoadingComplete(imageUri, view, loadedImage);
		FadeInBitmapDisplayer.animate(view, 800);//渐渐显示的效果
	}
});

你可能感兴趣的:(android,开源框架)