Android-Universal-Image-Loader 开源的图片异步加载库

发布于 2024-04-15 06:39:40 字数 5327 浏览 17 评论 0

之前项目中用到的图片异步加载库是 LazyList 。随着需求的不算增长,需求有点不太能满足,缺少可配置的选项,于是换到了强大的 UniversalImageLoader

一、介绍

Android-Universal-Image-Loader 是一个开源的图片异步加载库,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。该库非常强大,国内外很多有名的应用程序都有使用,在该类库的默认缓存文件夹中甚至发现了 google、instagram、qq、baidu 都有在用。

二、特点

  • 多线程的图像加载
  • 尽可能多的配置选项(线程池,加载器,解析器,内存/磁盘缓存,显示参数等等)
  • 图片可以缓存在内存中,或者设备文件目录下,或者 SD 卡中
  • 可以添加图片加载监听器
  • 可以自定义显示每一张图片时都带不同参数
  • 支持 Widget
  • Android 1.5 以上支持

三、使用方法

1. Android Manifest

<manifest>
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Include next permission if you want to allow UIL to cache images on SD card -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
    <application android:name="MyApplication">
    ...
    </application>
</manifest>

2. Application class

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // Create global configuration and initialize ImageLoader with this configuration
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
            ...
            .build();
        ImageLoader.getInstance().init(config);
    }
}

Configuration

所有的选项都是可选的,只选择你真正想制定的去配置。

File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    //如果图片尺寸大于了这个参数,那么就会这按照这个参数对图片大小进行限制并缓存
    .memoryCacheExtraOptions(480, 800) // default=device screen dimensions
    .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75)
    .taskExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
    .taskExecutorForCachedImages(AsyncTask.THREAD_POOL_EXECUTOR)
    .threadPoolSize(3) // default
    .threadPriority(Thread.NORM_PRIORITY - 1) // default
    .tasksProcessingOrder(QueueProcessingType.FIFO) // default
    .denyCacheImageMultipleSizesInMemory()
    .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
    .memoryCacheSize(2 * 1024 * 1024)
    .discCache(new UnlimitedDiscCache(cacheDir)) // default
    .discCacheSize(50 * 1024 * 1024)
    .discCacheFileCount(100)
    .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
    .imageDownloader(new BaseImageDownloader(context)) // default
    .imageDecoder(new BaseImageDecoder()) // default
    .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
    .enableLogging()
    .build();

Display Options

显示参数可以分别被每一个显示任务调用 ImageLoader.displayImage(…)

DisplayImageOptions options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.ic_stub)  // 在显示真正的图片前,会加载这个资源
    .showImageForEmptyUri(R.drawable.ic_empty) //空的 Url 时
    .showImageOnFail(R.drawable.ic_error) 
    .resetViewBeforeLoading() // 
    .delayBeforeLoading(1000)     // 延长 1000ms 加载图片  (想不出来用在什么场景下)
    .cacheInMemory()              
    .cacheOnDisc()               
    .preProcessor(...)            
    .postProcessor(...)           
    .extraForDownloader(...)      //可以向加载器携带一些参数 
    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default  
    .bitmapConfig(Bitmap.Config.ARGB_8888) // default
    .decodingOptions(...)
    .displayer(new SimpleBitmapDisplayer()) // default
    .handler(new Handler()) // default
    .build();

可接收的 URL

String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content     provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

完整版

// Load image, decode it to Bitmap and display Bitmap in ImageView
imageLoader.displayImage(imageUri, imageView, displayOptions, 
new ImageLoadingListener() {
    @Override
    public void onLoadingStarted(String imageUri, View view) {
        ...
    }
    @Override
    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
        ...
    }
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        ...
    }    
    @Override
    public void onLoadingCancelled(String imageUri, View view) {
        ...
    }
});


ImageSize targetSize = new ImageSize(120, 80); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri, targetSize, displayOptions, new     SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

孤檠

暂无简介

0 文章
0 评论
478 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文