美文网首页
Android-Universal-Image-Loader图片

Android-Universal-Image-Loader图片

作者: 名字_都被占了 | 来源:发表于2018-04-10 23:02 被阅读0次

    依赖为
    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://img.haomeiwen.com/i6213762/0a6b04b9db43b96e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/525",new ImageViewAware(imageView),imageOptions());//和下面那个加载图片的方式相比,第二个参数不同
            ImageLoader.getInstance()
                    .displayImage("https://img.haomeiwen.com/i6213762/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://img.haomeiwen.com/i6213762/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图片

          本文链接:https://www.haomeiwen.com/subject/hceohftx.html