Universal-Image-LoaderUIL图片载入框架使用简介

这个也是近期项目中使用到的第三方图片载入框架。在这里也自己总结一下,简单的介绍一些使用的方式。

UIL图片载入框架特点

简单介绍:

项目地址:https://github.com/nostra13/Android-Universal-Image-Loader
异步载入图片或者载入大量图片常常会遇到图片错乱或者OOM等相关问题。UIL图片缓存,眼下使用最广泛的图片缓存。支持主流图片缓存的绝大多数特性。
我们看下该图片载入的三级缓存原理

特点:
   1.多线程下载图片。图片能够来源于网络,文件系统,项目文件夹assets中以及drawable中等
   2.支持任意的配置ImageLoader,比如线程池。图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其它的一些配置
   3.支持图片的内存缓存,文件系统缓存或者SD卡缓存
   4.支持图片下载过程的监听
   5.依据控件ImageView)的大小对Bitmap进行裁剪,降低Bitmap占用过多的内存
   6.较好的控制图片的载入过程,比如暂停图片载入。又一次開始载入图片,一般使用在ListView,GridView中。滑动过程中暂停载入图片。停止滑动的时候去载入图片
   7.提供在较慢的网络下对图片进行载入

当然了哈,主流的图片载入还有其它的几个
Picasso
Cube ImageLoader
Fresco 这个能够看看我的还有一篇(Fresco图片载入框架的简单介绍)
Glide

UIL图片载入框架使用解说

第一步。项目引入

ImageLoader Jar包引入项目中:https://github.com/nostra13/Android-Universal-Image-Loader/raw/master/downloads/universal-image-loader-1.9.5.jar
或者是下载这个项目,然后导入到project中。使用库依赖的方式进行引用,假设还不太懂怎么导入demo和库依赖,能够看下
AndroidStudio导入本地和github项目,以及怎么加入第三方依赖介绍

第二步
配置ImageLoder參数ImageLoaderConfiguration)
       ImageLoaderConfiguration configuration = ImageLoaderConfiguration  
                .createDefaultthis); 
第三步
初始化ImageLoader  ImageLoader.getInstance)
第四步
displayImage), loadImage),loadImageSync)

好了,我们開始载入图片吧。
这个时候,我们须要配置imageloader的參数。也就是在application里面配置。这里我们的application使用的是单例模式:

public class MyApplication extends Application{

    private static MyApplication instance=null;
    @Override
    public void onCreate) {
        super.onCreate);
        this.instance=this;
        initImageLoadergetApplicationContext));
    }
    public static MyApplication getInstance){
        return instance;
    }

    private void initImageLoaderContext context){
    //cacheDir这里是获取到他默认的本地缓存文件夹。这StorageUtils是他这个imageloader里面的工具类,默认的缓存文件夹是包名/cache文件夹下当然自己能够改变)
        File cacheDir = StorageUtils.getCacheDirectorycontext);
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration
                .Buildercontext)
                .threadPoolSize5)//线程池
                .diskCachenew UnlimitedDiskCachecacheDir))//内存卡
                .threadPriorityThread.NORM_PRIORITY -2)//线程优先级
                .denyCacheImageMultipleSizesInMemory)
                .memoryCachenew LargestLimitedMemoryCache2 * 1024 * 1024))//内存缓存
                .memoryCacheSize2 * 1024 * 1024)//内存缓存大小
                .diskCacheSize50 * 1024 * 1024)//存储卡缓存大小
                .diskCacheFileCount100)//存储卡文件个数
                .memoryCacheSizePercentage13) // default
                .diskCacheFileNameGeneratornew HashCodeFileNameGenerator)) // default
                .imageDownloadernew BaseImageDownloaderthis, 5 * 1000, 30 * 1000)) // default
                .defaultDisplayImageOptionsDisplayImageOptions.createSimple)) // default
                        //.writeDebugLogs)
                .tasksProcessingOrderQueueProcessingType.FIFO)  //先进先出
                .build);
                ImageLoader.getInstance).initconfiguration);
    }

}

接下来,我们就要获取imageloader的实例。和设置DisplayImageOptions的參数,这里我附上一张DisplayImageOptions配置图:

       mImageLoader = ImageLoader.getInstance);
        mOptions = new DisplayImageOptions.Builder)
                .showImageOnLoadingR.mipmap.ic_launcher)//图片载入的时候显示的默认图
                .showImageForEmptyUriR.mipmap.ic_launcher)//图片的地址为空的时候显示的图
                .showImageOnFailR.mipmap.ic_launcher)//图片载入失败的时候显示
                .cacheOnDisktrue)   //设置保存在sdcard中
                .cacheInMemorytrue) //设置保存在内存其中
                .build);

最后我们就要载入图片了:
载入之前:

载入成功后:
是不是非常easy呢。并且配置也是通俗易懂的。只是不幸的是,这个框架。已经停止了更新,只是我相信,这么优秀的开源框架,还是会有非常多人记着的。

当然了哈,我的项目中用到的也就是载入图片,并没实用到其它的厉害的方法,比方

// Load image, decode it to Bitmap and display Bitmap in ImageView or any other view 
//  which implements ImageAware interface)
imageLoader.displayImageimageUri, imageView, options, new ImageLoadingListener) {
    @Override
    public void onLoadingStartedString imageUri, View view) {
    //開始载入
        ...
    }
    @Override
    public void onLoadingFailedString imageUri, View view, FailReason failReason) {
    //载入失败
        ...
    }
    @Override
    public void onLoadingCompleteString imageUri, View view, Bitmap loadedImage) {
    //载入完毕
        ...
    }
    @Override
    public void onLoadingCancelledString imageUri, View view) {
    //载入取消
        ...
    }
}, new ImageLoadingProgressListener) {
    @Override
    public void onProgressUpdateString imageUri, View view, int current, int total) {
    //载入百分比
        ...
    }
});
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = new ImageSize80, 50); // result Bitmap will be fit to this size
imageLoader.loadImageimageUri, targetSize, options, new SimpleImageLoadingListener) {
    @Override
    public void onLoadingCompleteString imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});
// Load image, decode it to Bitmap and return Bitmap synchronously
ImageSize targetSize = new ImageSize80, 50); // result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSyncimageUri, targetSize, options);

好了,想要了解很多其它的有关Universal-Image-Loader,能够去官网下载下来慢慢研究,这里就不多做解释了哈。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平