美文网首页Flutter
Android Glide 简单封装、工具类

Android Glide 简单封装、工具类

作者: 星邪Ara | 来源:发表于2021-06-16 11:08 被阅读0次

    项目中较长用到Glide,然后就给他简单封装了下。
    中间也遇到centerCrop方法跟其他BitmapTransformation冲突,并将其解决了。

    一、导包

        //Glide
        //https://github.com/bumptech/glide
        api 'com.github.bumptech.glide:glide:4.12.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
        //Glide 用到的 BitmapTransformation
        //https://github.com/wasabeef/glide-transformations
        api 'jp.wasabeef:glide-transformations:4.3.0'
        //图片滤镜,需要用到可以导入
        //https://github.com/cats-oss/android-gpuimage
    

    二、代码

    /**
     * Glide工具类
     */
    public class GlideUtils {
        /*** 占位图 */
        public static int placeholderImage = R.drawable.ic_default_image;
        /*** 错误图 */
        public static int errorImage = R.drawable.ic_default_image;
    
        /**
         * 加载图片(默认)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         */
        public static void loadImage(Context context, String url, ImageView imageView) {
            RequestOptions options = new RequestOptions()
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
    
        }
    
        /**
         * 指定图片大小;使用override()方法指定了一个图片的尺寸。
         * Glide现在只会将图片加载成width*height像素的尺寸,而不会管你的ImageView的大小是多少了。
         * 如果你想加载一张图片的原始尺寸的话,可以使用Target.SIZE_ORIGINAL关键字----override(Target.SIZE_ORIGINAL)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         * @param width     图片宽度
         * @param height    图片高度
         */
        public static void loadImageSize(Context context, String url, ImageView imageView, int width, int height) {
            RequestOptions options = new RequestOptions()
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage)             //错误图
                    .override(width, height)
                    .priority(Priority.HIGH);
            Glide.with(context).load(url).apply(options).into(imageView);
    
        }
    
        /**
         * 禁用内存缓存功能
         * diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收五种参数:
         * <p>
         * DiskCacheStrategy.NONE: 表示不缓存任何内容。
         * DiskCacheStrategy.DATA: 表示只缓存原始图片。
         * DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
         * DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
         * DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         */
    
        public static void loadImageSizeKipMemoryCache(Context context, String url, ImageView imageView) {
            RequestOptions options = new RequestOptions()
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage)             //错误图
                    .skipMemoryCache(true);          //禁用掉Glide的内存缓存功能
            Glide.with(context).load(url).apply(options).into(imageView);
    
        }
    
        /**
         * 预先加载图片
         * 在使用图片之前,预先把图片加载到缓存,调用了预加载之后,我们以后想再去加载这张图片就会非常快了,
         * 因为Glide会直接从缓存当中去读取图片并显示出来
         *
         * @param context 上下文
         * @param url     链接
         */
        public static void preloadImage(Context context, String url) {
            Glide.with(context).load(url).preload();
        }
    
        /**
         * 加载圆形图片
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         */
        public static void loadCircleImage(Context context, String url, ImageView imageView) {
            RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .circleCrop()//设置圆形
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage)             //错误图
                    .priority(Priority.HIGH);
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * 加载圆形带边框图片
         *
         * @param context     上下文
         * @param url         链接
         * @param imageView   ImageView
         * @param borderSize  边框宽度 px
         * @param borderColor 边框颜色
         */
        public static void loadCircleWithBorderImage(Context context, String url, ImageView imageView,
                                                     float borderSize, @ColorInt int borderColor) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new CropCircleWithBorderTransformation(SizeUtils.px2dp(context, borderSize), borderColor)
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * 加载圆角图片
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         * @param radius    圆角 px
         */
        public static void loadRoundCircleImage(Context context, String url, ImageView imageView,
                                                float radius) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new RoundedCornersTransformation(SizeUtils.px2dp(context, radius), 0,
                                    RoundedCornersTransformation.CornerType.ALL)
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
    
        }
    
    
        /**
         * 加载圆角图片-指定任意部分圆角(图片上、下、左、右四个角度任意定义)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         * @param radius    圆角 px
         * @param type      圆角位置
         */
        public static void loadRoundCircleImage(Context context, String url, ImageView imageView,
                                                float radius, RoundedCornersTransformation.CornerType type) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new RoundedCornersTransformation(SizeUtils.px2dp(context, radius), 0, type)
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * 加载模糊图片(自定义透明度)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         * @param blur      模糊度,一般1-100够了,越大越模糊
         */
        public static void loadBlurImage(Context context, String url, ImageView imageView, int blur) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new BlurTransformation(blur)
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * 加载模糊图片(自定义透明度)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         * @param blur      模糊度,一般1-100够了,越大越模糊
         * @param sampling  取样
         */
        public static void loadBlurImage(Context context, String url, ImageView imageView, int blur, int sampling) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new BlurTransformation(blur, sampling)
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * 加载灰度(黑白)图片(自定义透明度)
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         */
        public static void loadBlackImage(Context context, String url, ImageView imageView) {
            RequestOptions options = RequestOptions.bitmapTransform(
                    new MultiTransformation<>(
                            new CenterCrop(),
                            new GrayscaleTransformation()
                    ))
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context).load(url).apply(options).into(imageView);
        }
    
        /**
         * Glide.with(this).asGif()    //强制指定加载动态图片
         * 如果加载的图片不是gif,则asGif()会报错, 当然,asGif()不写也是可以正常加载的。
         * 加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。
         * 如果你传入的还是一张GIF图的话,Glide会展示这张GIF图的第一帧,而不会去播放它。
         *
         * @param context   上下文
         * @param url       链接
         * @param imageView ImageView
         */
        private void loadGif(Context context, String url, ImageView imageView) {
            RequestOptions options = new RequestOptions()
                    .placeholder(placeholderImage) //占位图
                    .error(errorImage);            //错误图
            Glide.with(context)
                    .load(url)
                    .apply(options)
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            return false;
                        }
    
                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            return false;
                        }
                    })
                    .into(imageView);
    
        }
    
        /**
         * 下载图片
         * 在RequestListener的onResourceReady方法里面获取下载File图片
         * new RequestListener<File>() {
         * *@Override
         * public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
         * return false;
         * }
         * <p>
         * *@Override
         * public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
         * //resource即为下载取得的图片File
         * return false;
         * }
         * }
         *
         * @param context         上下文
         * @param url             下载链接
         * @param requestListener 下载监听
         */
        public void downloadImage(final Context context, final String url, RequestListener<File> requestListener) {
            Glide.with(context)
                    .downloadOnly()
                    .load(url)
                    .addListener(requestListener).preload();
        }
    }
    

    相关文章

      网友评论

        本文标题:Android Glide 简单封装、工具类

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