Glide:4.8.0基础使用

2023-10-31

参考:https://blog.csdn.net/mars314/article/details/80653795

首先,添加依赖

implementation 'com.github.bumptech.glide:glide:4.8.0'
 annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

之后添加访问网络权限

<uses-permission android:name="android.permission.INTERNET"/>
//它可以监听用户的连接状态并在用户重新连接到网络时重启之前失败的请求
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
//用于硬盘缓存和读取
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

混淆:
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public class * extends com.bumptech.glide.module.AppGlideModule
    -keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
     **[] $VALUES;
     public *;
    }

    # for DexGuard only
    -keepresourcexmlelements manifest/application/meta-data@value=GlideModule

一、常用的方法

  Glide.with(this)             //with()方法可以接收Context、Activity或者Fragment类型的参数
                .load(url)        //load方法中不仅可以传入图片地址,还可以传入图片文件File,resource,图片的byte数组等
                .into(imageView);
 

// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);

// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);

// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);

// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

 注意with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。


加载圆形图

Glide.with(this)
        .load(R.mipmap.ic_splash_bg)
        .apply(bitmapTransform(new CropCircleTransformation()))
        .into(mImageHead);

 模糊过滤

Glide.with(this)
                .load(R.mipmap.ic_splash_bg)
                .apply(bitmapTransform(new BlurTransformation( 25, 4)))
                .into(mImageView);

Glide中的大部分设置项都可以通过 RequestOptions 类和 apply() 方法来应用到程序中。

 RequestOptions options = new RequestOptions()
                .placeholder(R.mipmap.ic_launcher)                //加载成功之前占位图
                .error(R.mipmap.ic_launcher)                    //加载错误之后的错误图
                .override(400,400)                                //指定图片的尺寸
                //指定图片的缩放类型为fitCenter (等比例缩放图片,宽或者是高等于ImageView的宽或者是高。)
                .fitCenter()
                //指定图片的缩放类型为centerCrop (等比例缩放图片,直到图片的狂高都大于等于ImageView的宽度,然后截取中间的显示。)
                .centerCrop()
                .circleCrop()//指定图片的缩放类型为centerCrop (圆形)
                .skipMemoryCache(true)                            //跳过内存缓存
                .diskCacheStrategy(DiskCacheStrategy.ALL)        //缓存所有版本的图像
                .diskCacheStrategy(DiskCacheStrategy.NONE)        //跳过磁盘缓存
                .diskCacheStrategy(DiskCacheStrategy.DATA)        //只缓存原来分辨率的图片
                .diskCacheStrategy(DiskCacheStrategy.RESOURCE)    //只缓存最终的图片
                ;
        Glide.with(this)
                .load(url)
                .apply(options)
                .into(imageView);
注意 实际上,使用Glide在大多数情况下我们都是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小,以此保证图片不会占用过多的内存从而引发OOM。不过,如果你真的有这样的需求,必须给图片指定一个固定的大小,Glide仍然是支持这个功能的。修改Glide加载部分的代码,仍然非常简单,这里使用override()方法指定了一个图片的尺寸。也就是说,Glide现在只会将图片加载成400*400像素的尺寸,而不会管你的ImageView的大小是多少了。如果你想加载一张图片的原始尺寸的话,可以使用Target.SIZE_ORIGINAL关键字,.override(Target.SIZE_ORIGINAL);这样的话,Glide就不会再去自动压缩图片,而是会去加载图片的原始尺寸。当然,这种写法也会面临着更高的OOM风险。
            这个diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收五种参数:
            DiskCacheStrategy.NONE: 表示不缓存任何内容。
            DiskCacheStrategy.DATA: 表示只缓存原始图片。
            DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
            DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
            DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
                
    Glide其中一个非常亮眼的功能就是可以加载GIF图片,而同样作为非常出色的图片加载框架的Picasso是不支持这个功能的。而且使用Glide加载GIF图并不需要编写什么额外的代码,Glide内部会自动判断图片格式。
    但是如果我想指定加载格式该怎么办呢?想实现这个功能仍然非常简单,我们只需要再串接一个新的方法就可以了
        Glide.with(this)
             .asBitmap()
             .load(url)
             .into(imageView);
        这里在with()方法的后面加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。如果你传入的还是一张GIF图的话,Glide会展示这张GIF图的第一帧,而不会去播放它。对应的方法是asGif()。而Glide 4中又新增了asFile()方法和asDrawable()方法,分别用于强制指定文件格式的加载和Drawable格式的加载.

另:Glide加载转换Bitmap 方法:

try {
    Bitmap bitmap = Glide
            .with(this)
            .asBitmap()//这一个必须加
            .load("url")
            .into(100, 100)
            .get();
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

更多转换请参考官方指南了解使用:https://muyangmin.github.io/glide-docs-cn/doc/getting-started.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Glide:4.8.0基础使用 的相关文章

随机推荐

  • 并查集、树状数组

    并查集 树状数组 线段树 并查集 树状数组 树状数组1 单点修改 区间查询 树状数组2 单点查询 区间修改 并查集 模板 并查集 题目描述 如题 现在有一个并查集 你需要完成合并和查询操作 输入格式 第一行包含两个整数 N M N M N
  • 清华镜像用法

    用pip安装模块时 总是会报错 大片红字 请求超时 影响心情 如果使用镜像安装 就会很顺 敲一下回车键 一两秒就搞定 节约时间 平常简单用法是 pip install beautifulsoup4 加入镜像参数后 pip install b
  • 任意进制转换(c++)

    include
  • OpenHarmony源码解析(12): hisysevent

    1 概述 HiSysEvent是面向OpenHarmony系统开发者提供的系统打点功能 通过在关键路径埋点来记录系统在运行过程中的重要信息 辅助开发者定位问题 此外还支持开发者将打点数据上传到云进行大数据质量度量 HiSysEvent包括H
  • 并查集的妙用——Leetcode 1202

    并查集的妙用 Leetcode 1202 给你一个字符串 s 以及该字符串中的一些 索引对 数组 pairs 其中 pairs i a b 表示字符串中的两个索引 编号从 0 开始 你可以 任意多次交换 在 pairs 中任意一对索引处的字
  • Springboot-data-redis结合SpringCache的使用

    spring boot data redis 与 Caache的结合使用 一 springboot data redis操作redis 二 结合Spring Cache 的使用 一 springboot data redis操作redis
  • kali与Windows安装双系统,grub引导器安装失败,或安装grub后无法引导kali系统问题解决

    1 先看问题 安装失败图片 这个时候不要慌 既然它的自动安装无法搞定 那我们就手动安装grub引导器 注意 本人电脑环境是 windows10 分区表类型是GPT类型 尝试安装kali双系统出现grub引导器错误 不同环境下解决方法可能会有
  • React-防抖

    React实际操作 两个事件 onMouseOver 和 onMouseOut HTML div gt this onMouseOver record onMouseOut this onMouseOut gt constructor co
  • 彷徨

    目录 1 slaves 2 core site xml 3 hdfs site xml 4 mapred site xml 注意要将mapred site xml template重命名为 xml的文件 5 Yarn Site xml 6
  • R手册(Common)--面向对象(R6 and S4)

    R 主要面向统计计算 似乎很少会用到面向对象的编程方法 但在统计计算中 在下列情形中使用面向对象的编程方法可以编程更有效率 文章目录 面向对象R6类 面向对象S4类 自定义S4类 实例化函数 S4的泛型函数 面向对象R6类 R 的面向对象
  • Java实现图灵机XNx2

    题目要求 程序实现图灵机XNx2的功能 1 程序风格良好 使用自定义注释模板 2 提供友好的输入输出 并进行输入数据的正确性验证 语言环境 eclipse java 算法设计 程序代码 Number类 import java util Sc
  • 阿里p8架构师耗时一年整理SpringBoot,从构建小系统到架构大系统

    Java 的各种开发框架发展了很多年 影响了一代又一代的程序员 现在无论是程序员 还是架构师 使用这些开发框架都面临着两方面的挑战 一方面是要快速开发出系统 这就要求使用的开发框架尽量简单 无论是新手还是老手都能快速上手 快速掌握页面渲染
  • 目标检测的中的指标的含义及其实现

    目录 一 Precision和Recall 二 IoU Intersection over Union 三 top5 top1 四 Average Precision 五 COCO数据集的评价指标 1 Average Precision A
  • 太全了——用Python操作MySQL的使用教程集锦

    一 python操作数据库介绍 Python 标准数据库接口为 Python DB API Python DB API为开发人员提供了数据库应用编程接口 Python 数据库接口支持非常多的数据库 你可以选择适合你项目的数据库 GadFly
  • Abaqus打开失败FLEXnet Licensing error:-15,10. System Error: 10061 “WinSock: Connection refused“

    好久没用电脑上的abaqus 今天一点启动就出现如下问题 Cannot connect to license server system The license server manager lmgrd has not been start
  • Java如何设置过期时间的map

    大神封装的挺好用的 package com kufang uselocal utils import java util Title ExpiryMap 可以设置过期时间的Map description ExpiryMap继承至HashMa
  • [OPENAI2021力作][CLIP: Connecting Text and Images]

    本文翻译自OpenAI官方博客 1 于2021年1月5日发布 0 前言 本博客是openAI的大佬们的全新作品 其提出了可以用于从自然语言监督信号中有效提取视觉信息的 名为CLIP的神经网络 CLIP可以被用于任何视觉分类的benchmar
  • docker K8s部署

    docker K8s部署 docker build t www aaa cn pro admin 20230202 1703 docker images docker login www aaa cn U username P passwo
  • 码云出现错误git@gitee.com: Permission denied (publickey). fatal: Could not read from remote repository. P

    第一步 重新生成ssh ssh keygen t rsa C 这里需要填写邮箱 我填写的是我的绑定主邮箱 我想其他邮箱也是可以的 只不过我没有测试 第二步 查看你生成的公钥 cat ssh id rsa pub 然后我们就可以看到我们的公钥
  • Glide:4.8.0基础使用

    参考 https blog csdn net mars314 article details 80653795 首先 添加依赖 implementation com github bumptech glide glide 4 8 0 ann