Android-Universal-Image-Loader

项目网址:https://github.com/nostra13/Android-Universal-Image-Loader

1.1、权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1.2、缓存
1.2.1、内存缓存
1.2.2、磁盘缓存
1.2.3、清除缓存
public final class MainApplication extends Application {

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

		// 清除内存缓存
		ImageLoader.getInstance().clearMemoryCache();

		// 清除本地磁盘缓存
		ImageLoader.getInstance().clearDiskCache();
	}
}
1.3、配置

Android-Universal-Image-Loader非常灵活,绝大多数特性开发人员都可以进行配置。只能配置一次,如果多次配置,则默认第一次的配置参数有效。

使用默认配置:

ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);
ImageLoader.getInstance().init(configuration);

自定义配置参数:

public final class MainApplication extends Application {
	@Override
	public void onCreate() {
		super.onCreate();
		
		configImageLoader(this);
	}

	private void configImageLoader(Context context) {
		File cacheDir = StorageUtils.getCacheDirectory(context);
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
				.threadPoolSize(5)
				.threadPriority(Thread.NORM_PRIORITY - 1)
				.tasksProcessingOrder(QueueProcessingType.FIFO)
				.diskCache(new UnlimitedDiscCache(cacheDir))
				.denyCacheImageMultipleSizesInMemory()
				.memoryCache(new LruMemoryCache(10 * 1024 * 1024))
				.memoryCacheSize(10 * 1024 * 1024)
				.memoryCacheSizePercentage(13)
				.diskCacheExtraOptions(480, 320, null)
				.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
				.imageDownloader(new BaseImageDownloader(context))
				.imageDecoder(new BaseImageDecoder(true))
				.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
				.writeDebugLogs().build();
		ImageLoader.getInstance().init(config);
	}
}
1.4、URI

URI抽象结构:[scheme:][//authority][path][?query][#fragment]

其中,authority为[user-info@]host[:port]

Android-Universal-Image-Loader支持的URI如下表:

类型示例
WEB

"http://site.com/image.png"
"https://site.com/image.png"

File

"file://" + /mnt/sdcard/image.png
"file://" + /mnt/sdcard/video.mp4

Content Provider

"content://media/externalhttps://fpliustorage.blob.core.chinacloudapi.cn/blog/images/media/13"
"content://media/external/video/media/13"

assets

"assets://" + image.png

drawable

"drawable://" + R.drawable.img (non-9patch images)

1.5、BitmapDisplayer

默认的,Android-Universal-Image-Loader显示的图片是原形,即,原来的图片是什么形状,就显示成什么形状。 有时候,我们需要将图片显示成特定的形状,比如:圆形、圆角矩形、心形等。 这时候就需要用到这个接口和他的子类了。

Android-Universal-Image-Loader提供了BitmapDisplayer接口和几个常用的实现类,如下:

这几个实现类的作用:

类名作用
SimpleBitmapDisplayer以原形显示
CircleBitmapDisplayer以圆形显示
RoundedBitmapDisplayer以圆角矩形显示
RoundedVignetteBitmapDisplayer以圆角矩形显示(带相框)
FadeInBitmapDiaplayer以渐进(动画)形式显示

如果这几个实现类不能满足您的需求,就需要自己实现BitmapDisplayer接口进行扩展了。 具体可以参考Android-Universal-Image-Loader自己实现的这几个实现类。

1.6、DisplayImageOptions

示例:

public final class AsyncLoadImage {

	private AsyncLoadImage() {

	}

	/**
	 * 异步加载图片(圆形)
	 * @param imageView      显示图片的控件
	 * @param url            网络中的图片
	 * @param defaultResId   默认图片,在网络请求失败或者没有图片时候使用
	 */
	public static void asyncLoadFromUrlAsCircle(ImageView imageView, String url, int defaultResId) {
		if (TextUtils.isEmpty(url)) {
			imageView.setImageResource(defaultResId);
		} else {
			DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
			builder.showImageForEmptyUri(defaultResId);
			builder.showImageOnFail(defaultResId);
			builder.displayer(DISPLAYER_CIRCLE);
			DisplayImageOptions options = builder.build();
			ImageLoader.getInstance().displayImage(url, imageView, options);
		}
	}

	private static final BitmapDisplayer DISPLAYER_CIRCLE = new BitmapDisplayer() {

		@Override
		public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) {
			imageAware.setImageDrawable(new CircleImageDrawable(bitmap));
		}
	};
}
1.6、同步加载

函数:

public Bitmap loadImageSync(String uri)
public Bitmap loadImageSync(String uri, DisplayImageOptions options)
public Bitmap loadImageSync(String uri, ImageSize targetImageSize)
public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options)
1.7、异步加载

函数:

public void loadImage(String uri, ImageLoadingListener listener)
public void loadImage(String uri, ImageSize targetImageSize, ImageLoadingListener listener)
public void loadImage(String uri, DisplayImageOptions options, ImageLoadingListener listener)
public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options, ImageLoadingListener listener)
public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
1.8、异步显示

函数:

public void displayImage(String uri, ImageAware imageAware)
public void displayImage(String uri, ImageAware imageAware, ImageLoadingListener listener)
public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options)
public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
			ImageLoadingListener listener)
public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
			ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
			ImageSize targetSize, ImageLoadingListener listener, ImageLoadingProgressListener progressListener)


public void displayImage(String uri, ImageView imageView)
public void displayImage(String uri, ImageView imageView, ImageSize targetImageSize)
public void displayImage(String uri, ImageView imageView, DisplayImageOptions options)
public void displayImage(String uri, ImageView imageView, ImageLoadingListener listener)
public void displayImage(String uri, ImageView imageView, DisplayImageOptions options,
			ImageLoadingListener listener)
public void displayImage(String uri, ImageView imageView, DisplayImageOptions options,
			ImageLoadingListener listener, ImageLoadingProgressListener progressListener)