Android-Universal-Image-Loader图片加载库,实现图片的三级缓存

依赖为
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

在application中配置如下代码进行初始化

 public void initImageLoaderConfiguration(Context context) {
        //缓存文件目录
        File cacheDir = StorageUtils.getCacheDirectory(context);
        Log.d(TAG, "cacheDir:" + cacheDir);
        //构建配置
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                //默认屏幕的大小
                .memoryCacheExtraOptions(480, 800)
                // 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率
                .diskCacheExtraOptions(480, 800, null)
                // 设置自定义加载和显示图片的线程池
                .taskExecutor(DefaultConfigurationFactory.createExecutor(3, Thread.NORM_PRIORITY, QueueProcessingType.LIFO))
                // 设置自定义加载和显示内存缓存或者硬盘缓存图片的线程池
                .taskExecutorForCachedImages(DefaultConfigurationFactory.createExecutor(3, Thread.NORM_PRIORITY, QueueProcessingType.LIFO))
                // 设置显示图片线程池大小,默认为3
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                .threadPoolSize(3)
                // 设置图片加载线程的优先级,默认为Thread.NORM_PRIORITY-1
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                .threadPriority(Thread.NORM_PRIORITY - 2) // default
                // 设置图片加载和显示队列处理的类型 默认为QueueProcessingType.FIFO
                // 注:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                // 设置拒绝缓存在内存中一个图片多个大小 默认为允许,(同一个图片URL)根据不同大小的imageView保存不同大小图片
                .denyCacheImageMultipleSizesInMemory()
                // 设置内存缓存 默认为一个当前应用可用内存的1/8大小的LruMemoryCache
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                // 设置内存缓存的最大大小 默认为一个当前应用可用内存的1/8
                .memoryCacheSize(2 * 1024 * 1024)
                // 设置内存缓存最大大小占当前应用可用内存的百分比 默认为一个当前应用可用内存的1/8
                .memoryCacheSizePercentage(13) // default
                // 设置硬盘缓存
                .diskCache(new UnlimitedDiskCache(cacheDir)) //缓存路径
                // 设置硬盘缓存的最大大小
                .diskCacheSize(50 * 1024 * 1024)
                // 设置硬盘缓存的文件的最多个数
                .diskCacheFileCount(100)
                // 设置硬盘缓存文件名生成规范
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
                // 设置图片下载器
                .imageDownloader(new BaseImageDownloader(context)) // default
                // 设置图片解码器
                .imageDecoder(DefaultConfigurationFactory.createImageDecoder(false))
                // 设置默认的图片显示选项
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                // 打印DebugLogs
                .writeDebugLogs()
                //万事俱备 执行构造
                .build();
        //初始化配置文件
        ImageLoader.getInstance().init(config);
    }

在ImageLoadActivity.java文件中

public class ImageLoadActivity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imageload);
        imageView = (ImageView) findViewById(R.id.image);
        //ImageLoader.getInstance().displayImage("https://upload-images.jianshu.io/upload_images/6213762-0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525",new ImageViewAware(imageView),imageOptions());//和下面那个加载图片的方式相比,第二个参数不同
        ImageLoader.getInstance()
                .displayImage("https://upload-images.jianshu.io/upload_images/6213762-0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525",
                        imageView, imageOptions(), 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) {
                                Log.d("ImageLoadActivity", "当前进度" + current + ",总共" + total);//用这个接口来监控图片的下载进度,只有下载图片会调用这个方法,缓冲本地的图片不用调用这个方法
                            }
                        });
        //ImageLoader.getInstance().clearDiskCache();清除磁盘缓冲
        //ImageLoader.getInstance().clearMemoryCache();清除内存缓冲
    }

    public static DisplayImageOptions imageOptions() {//将这个静态方法拿个工具类装起来,这里是为了方便直接这样写的
        /**
         * DisplayImageOptions所有配置简介
         */
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                // 设置图片加载时的默认图片
                .showImageOnLoading(R.mipmap.ic_launcher)
                // 设置图片加载失败的默认图片
                .showImageOnFail(R.drawable.shadow_bottom)
                // 设置图片URI为空时默认图片
                .showImageForEmptyUri(R.drawable.shadow_right)
                // 设置是否将View在加载前复位
                .resetViewBeforeLoading(false)
                // 设置延迟部分时间才开始加载
                // 默认为0
                .delayBeforeLoading(100)
                // 设置添加到内存缓存
                // 默认为false
                .cacheInMemory(true)
                // 设置添加到硬盘缓存
                // 默认为false
                .cacheOnDisk(true)
                // 设置规模类型的解码图像
                // 默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                // 设置位图图像解码配置
                // 默认为Bitmap.Config.ARGB_8888
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                // 设置选项的图像解码
                .decodingOptions(new BitmapFactory.Options())
                // 设置自定义显示器,这里是设置图片为圆形
                // 默认为DefaultConfigurationFactory.createBitmapDisplayer()
                .displayer(new CircleBitmapDisplayer(Color.GREEN,5))//设置图片的显示形状的时候记得给图片设置具体的数值,可以是match_parent,但不能是warp_content
                // 设置自定义的handler
                // 默认为new Handler()
                .handler(new Handler())
                // 建立
                .build();
        return options;
    }
}

补充一下loadImage方法的用法,注意在使用loadImage方法的时候不能给DisplayImageOptions配置displayer方法,要在加载完毕后再用相应的形状进行设置

public class ImageLoadActivity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imageload);
        imageView = (ImageView) findViewById(R.id.image);
        ImageLoader.getInstance().loadImage("https://upload-images.jianshu.io/upload_images/6213762-0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525", imageOptions(), new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                Log.d("ImageLoadActivity", "开始加载");
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                Log.d("ImageLoadActivity", "加载完毕");
                imageView.setImageDrawable(new CircleBitmapDisplayer.CircleDrawable(loadedImage, Color.BLUE, 10));
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        });
 public static DisplayImageOptions imageOptions() {
        /**
         * DisplayImageOptions所有配置简介
         */
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                // 设置图片加载时的默认图片
                .showImageOnLoading(R.mipmap.ic_launcher)
                // 设置图片加载失败的默认图片
                .showImageOnFail(R.drawable.shadow_bottom)
                // 设置图片URI为空时默认图片
                .showImageForEmptyUri(R.drawable.shadow_right)
                // 设置是否将View在加载前复位
                .resetViewBeforeLoading(false)
                // 设置延迟部分时间才开始加载
                // 默认为0
                .delayBeforeLoading(100)
                // 设置添加到内存缓存
                // 默认为false
                .cacheInMemory(true)
                // 设置添加到硬盘缓存
                // 默认为false
                .cacheOnDisk(true)
                // 设置规模类型的解码图像
                // 默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                // 设置位图图像解码配置
                // 默认为Bitmap.Config.ARGB_8888
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                // 设置选项的图像解码
                .decodingOptions(new BitmapFactory.Options())
                // 设置自定义显示器,这里是设置图片为圆形
                // 默认为DefaultConfigurationFactory.createBitmapDisplayer()
                //.displayer(new CircleBitmapDisplayer(Color.GREEN, 5))//设置图片的显示形状的时候记得给图片设置具体的数值,可以是match_parent,但不能是warp_content
                // 设置自定义的handler
                // 默认为new Handler()
                .handler(new Handler())
                // 建立
                .build();
        return options;
    }
}

你可能感兴趣的:(Android-Universal-Image-Loader图片加载库,实现图片的三级缓存)