项目网址:https://github.com/nostra13/Android-Universal-Image-Loader
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
public final class MainApplication extends Application {
@Override
public void onLowMemory() {
super.onLowMemory();
// 清除内存缓存
ImageLoader.getInstance().clearMemoryCache();
// 清除本地磁盘缓存
ImageLoader.getInstance().clearDiskCache();
}
}
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);
}
}
URI
抽象结构:[scheme:][//authority][path][?query][#fragment]
其中,authority为[user-info@]host[:port]
Android-Universal-Image-Loader
支持的URI
如下表:
类型 | 示例 |
---|---|
WEB | "http://site.com/image.png" |
File | "file://" + /mnt/sdcard/image.png |
Content Provider | "content://media/externalhttps://fpliustorage.blob.core.chinacloudapi.cn/blog/images/media/13" |
assets | "assets://" + image.png |
drawable | "drawable://" + R.drawable.img (non-9patch images) |
默认的,Android-Universal-Image-Loader
显示的图片是原形,即,原来的图片是什么形状,就显示成什么形状。 有时候,我们需要将图片显示成特定的形状,比如:圆形、圆角矩形、心形等。 这时候就需要用到这个接口和他的子类了。
Android-Universal-Image-Loader
提供了BitmapDisplayer
接口和几个常用的实现类,如下:
这几个实现类的作用:
类名 | 作用 |
---|---|
SimpleBitmapDisplayer | 以原形显示 |
CircleBitmapDisplayer | 以圆形显示 |
RoundedBitmapDisplayer | 以圆角矩形显示 |
RoundedVignetteBitmapDisplayer | 以圆角矩形显示(带相框) |
FadeInBitmapDiaplayer | 以渐进(动画)形式显示 |
如果这几个实现类不能满足您的需求,就需要自己实现BitmapDisplayer
接口进行扩展了。 具体可以参考Android-Universal-Image-Loader
自己实现的这几个实现类。
示例:
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));
}
};
}
函数:
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)
函数:
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)
函数:
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)