zoukankan      html  css  js  c++  java
  • Universal-Image-Loader(UIL)图片载入框架使用简介

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

    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.提供在较慢的网络下对图片进行载入
    

    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  
                    .createDefault(this); 
    
    第三步
    初始化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;
            initImageLoader(getApplicationContext());
        }
        public static MyApplication getInstance(){
            return instance;
        }
    
        private void initImageLoader(Context context){
        //cacheDir这里是获取到他默认的本地缓存文件夹。这StorageUtils是他这个imageloader里面的工具类,默认的缓存文件夹是包名/cache文件夹下(当然自己能够改变)
            File cacheDir = StorageUtils.getCacheDirectory(context);
            ImageLoaderConfiguration configuration = new ImageLoaderConfiguration
                    .Builder(context)
                    .threadPoolSize(5)//线程池
                    .diskCache(new UnlimitedDiskCache(cacheDir))//内存卡
                    .threadPriority(Thread.NORM_PRIORITY -2)//线程优先级
                    .denyCacheImageMultipleSizesInMemory()
                    .memoryCache(new LargestLimitedMemoryCache(2 * 1024 * 1024))//内存缓存
                    .memoryCacheSize(2 * 1024 * 1024)//内存缓存大小
                    .diskCacheSize(50 * 1024 * 1024)//存储卡缓存大小
                    .diskCacheFileCount(100)//存储卡文件个数
                    .memoryCacheSizePercentage(13) // default
                    .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
                    .imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000)) // default
                    .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                            //.writeDebugLogs()
                    .tasksProcessingOrder(QueueProcessingType.FIFO)  //先进先出
                    .build();
                    ImageLoader.getInstance().init(configuration);
        }
    
    }

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

           mImageLoader = ImageLoader.getInstance();
            mOptions = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.mipmap.ic_launcher)//图片载入的时候显示的默认图
                    .showImageForEmptyUri(R.mipmap.ic_launcher)//图片的地址为空的时候显示的图
                    .showImageOnFail(R.mipmap.ic_launcher)//图片载入失败的时候显示
                    .cacheOnDisk(true)   //设置保存在sdcard中
                    .cacheInMemory(true) //设置保存在内存其中
                    .build();

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

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

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

    // Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view 
    //  which implements ImageAware interface)
    imageLoader.displayImage(imageUri, imageView, options, 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) {
        //载入取消
            ...
        }
    }, new ImageLoadingProgressListener() {
        @Override
        public void onProgressUpdate(String imageUri, View view, int current, int total) {
        //载入百分比
            ...
        }
    });
    // Load image, decode it to Bitmap and return Bitmap to callback
    ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
    imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {
        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            // Do whatever you want with Bitmap
        }
    });
    // Load image, decode it to Bitmap and return Bitmap synchronously
    ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size
    Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);

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

  • 相关阅读:
    LuoguP1016 旅行家的预算 (贪心)
    LuoguP2254 [NOI2005]瑰丽华尔兹 (单调队列优化DP)(用记忆化过了。。。)
    LuoguP2876 [USACO07JAN]解决问题Problem Solving (区间DP)(未完成)
    Luogu3275 [SCOI2011]糖果 (差分约束)
    Luogu1993 小K的农场 (差分约束)
    Luogu4427 [BJOI2018]求和 (树上差分)
    LuoguP1516 青蛙的约会 (Exgcd)
    POJ3903Stock Exchange (LIS)
    LuoguP1020 导弹拦截 (LIS)
    线性筛
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7083627.html
Copyright © 2011-2022 走看看