Android Glide 基础用法

Glide 是当前用的比较多的网络图片加载框架,加载网络图片很流畅

实现:

1、设置网络权限

<uses-permission android:name="android.permission.INTERNET" />

2、添加依赖

dependencies {
    //网络图片加载依赖
    implementation 'com.github.bumptech.glide:glide:3.7.0'
}

3、使用

基础用法

public static void displayImage(Context context, Object path, ImageView imageView) {
    Glide.with(context)
            .load(path.toString())
            .into(imageView);
}

常用属性展示

//常用的属性
public static void displayImageExperiment(Context context, Object path, ImageView imageView) {
            //with 可用于启动加载的顶级应用程序的RequestManager
    Glide.with(context)

            //文件路径(加载图片的网络位置,也可以是GIF,和本地视频-网络视频不行)
            //.load( Uri.fromFile( new File( filePath ) ) )   本地视频
            .load(path.toString())

            //占位图设置(加载错误或者加载失败时显示的图片)图片自己设置
            //placeholder() 和 error() 的参数都是只支持 int 和 Drawable 类型的参数,这种设计应该是考虑到使用本地图片
            .placeholder(R.drawable.ic_launcher_background)//图片加载出来前,显示的图片
            .error(R.drawable.ic_launcher_background)//图片加载失败后,显示的图片

            //缩略图,参数是flost类型,作为其倍数大小
            .thumbnail( 0.2f )

            //动画开关 - crossFade() 方法强制开启 Glide 默认的图片淡出淡入动画(也可以自定义动画效果哦)
            .crossFade()//或者使用 dontAnimate() 关闭动画

            //图片大小与裁剪
            .override(100,70)//这里的单位是px

            //图片的缓存处理  (内存缓存、磁盘缓存)
            /*
            * DiskCacheStrategy.NONE 什么都不缓存
            * DiskCacheStrategy.SOURCE 只缓存全尺寸图
            * DiskCacheStrategy.RESULT 只缓存最终的加载图
            * DiskCacheStrategy.ALL 缓存所有版本图(默认行为)
            * */
            .diskCacheStrategy( DiskCacheStrategy.SOURCE )

            //图片请求的优先级,如果同时加载很多图片,就可以设置优先级(分为:立即、高、正常、低、优先)
            /*
            * IMMEDIATE,
            * HIGH,
            * NORMAL,
            * LOW,
            * priority,
            * */
            .priority (Priority.priority )
            
            //设置布局,加载的图片显示布局
            .into(imageView);
}

3、清除缓存

清除内存缓存
public static void clearMemory(Context context) {
    Glide.get(context).clearMemory();//清理内存缓存  可以在UI主线程中进行
}
清除磁盘缓存
public static void clearDiskCache(final Context context) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            Glide.get(context).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
        }
    }).start();
}

 

图片加载的方法可以根据自己的需要封装到Utils类中,方便调用,出了基础用法中的必要属性,其他的属性可以自由配置

 

4、进阶-图片处理

如果需要圆形、圆角,模糊等处理操作,可以添加下面的依赖

implementation 'jp.wasabeef:glide-transformations:2.0.1'

5、进阶方法示例

 //常量
 static class Contants {
     public static final int BLUR_VALUE = 20; //模糊度
     public static final int CORNER_RADIUS = 20; //圆角角度
     public static final float THUMB_SIZE = 0.5f; //0-1之间  10%原图的大小
 }

 /**
  * 常规加载图片
  * @param context
  * @param imageView  图片容器
  * @param imgUrl  图片地址
  * @param isFade  是否需要动画
  */
 public void loadImage(Context context, ImageView imageView,
                              String imgUrl, boolean isFade) {
     if (isFade) {
         Glide.with(context)
                 .load(imgUrl)
                 .placeholder(R.mipmap.ic_launcher)
                 .dontAnimate()
                 .error(R.mipmap.error)
                 .crossFade()
                 .priority(Priority.NORMAL) //下载的优先级
                 //all:缓存源资源和转换后的资源 none:不作任何磁盘缓存
                 //source:缓存源资源   result:缓存转换后的资源
                 .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
                 .into(imageView);
     } else {
         Glide.with(context)
                 .load(imgUrl)
                 //.error(R.mipmap.error)
                 .into(imageView);
     }
 }

 /**
  * 加载图片并设置为指定大小
  * @param context
  * @param imageView
  * @param imgUrl
  * @param withSize
  * @param heightSize
  */
 public void loadOverrideImage(Context context, ImageView imageView,
                               String imgUrl, int withSize, int heightSize) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .override(withSize, heightSize)
             .into(imageView);
 }

 /**
  * 加载图片并对其进行模糊处理
  * @param context
  * @param imageView
  * @param imgUrl
  */
public void loadBlurImage(Context context, ImageView imageView, String imgUrl) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .bitmapTransform(new BlurTransformation(context, Contants.BLUR_VALUE))
             .into(imageView);
 }

 /**
  * 加载圆图
  * @param context
  * @param imageView
  * @param imgUrl
  */
 public void loadCircleImage(Context context, ImageView imageView, String imgUrl) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .bitmapTransform(new CropCircleTransformation(context))
             .into(imageView);
 }

 /**
  * 加载模糊的圆形的图片
  * @param context
  * @param imageView
  * @param imgUrl
  */
 public void loadBlurCircleImage(Context context, ImageView imageView, String imgUrl) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .bitmapTransform(
                     new BlurTransformation(context, Contants.BLUR_VALUE),
                     new CropCircleTransformation(context))
             .into(imageView);
 }

 /**
  * 加载圆角图片
  * @param context
  * @param imageView
  * @param imgUrl
  */
 public void loadCornerImage(Context context, final ImageView imageView, String imgUrl) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .bitmapTransform(
                     new RoundedCornersTransformation(
                             context, Contants.CORNER_RADIUS, Contants.CORNER_RADIUS))
             .listener(new RequestListener<String, GlideDrawable>() {
                 @Override
                 public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                     return false;
                 }

                 @Override
                 public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                     if (imageView == null) {
                         return false;
                     }
                     if (imageView.getScaleType() != ImageView.ScaleType.FIT_XY) {
                         imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                     }
                     ViewGroup.LayoutParams params = imageView.getLayoutParams();
                     int vw = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight();
                     float scale = (float) vw / (float) resource.getIntrinsicWidth();
                     int vh = Math.round(resource.getIntrinsicHeight() * scale);
                     params.height = vh + imageView.getPaddingTop() + imageView.getPaddingBottom();
                     imageView.setLayoutParams(params);
                     return false;
                 }
             })
             .into(imageView);
 }

 /**
  * 加载模糊的圆角图片
  * @param context
  * @param imageView
  * @param imgUrl
  */
 public void loadBlurCornerImage(Context context, ImageView imageView, String imgUrl) {
     Glide.with(context)
             .load(imgUrl)
             .error(R.mipmap.error)
             .crossFade()
             .priority(Priority.NORMAL) //下载的优先级
             .diskCacheStrategy(DiskCacheStrategy.ALL) //缓存策略
             .bitmapTransform(
                     new BlurTransformation(context, Contants.BLUR_VALUE),
                     new RoundedCornersTransformation(
                             context, Contants.CORNER_RADIUS, Contants.CORNER_RADIUS))
             .into(imageView);
 }

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值