Android Glide

1.引入glide
java 复制代码
implementation 'com.github.bumptech.glide:glide:4.14.2'
// Skip this if you don't want to use integration libraries or configure Glide.
annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'  //Glide 注解处理器
2.AndroidManifest.xml 中添加需要的权限

如果你计划从 URL 或一个网络连接中加载数据,你需要加INTERNETACCESS_NETWORK_STATE权限到你的AndroidManifest.xml中,要从本地文件夹或DCIM或图库中加载图片,你将需要添加READ_EXTERNAL_STORAGE权限。

java 复制代码
<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" />
3.基本使用

Glide.with(fragment/Context/View)
.load(url)
.into(imageView)

4.Glide占位符

Glide允许用户指定三种不同类型的占位符,分别在三种不同场景使用:
1.placeholder正在请求图片的时候展示的图片,当请求成功完成时,占位符会被请求到的资源替换。
2. error 如果请求失败的时候展示的图片 (如果没有设置,还是展示placeholder的占位符)
3. fallback 如果请求的url/model为 null 的时候展示的图片 (如果没有设置,还是展示placeholder的占位符)

java 复制代码
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback)
.override(100,100); //override指定加载图片大小


Glide.with([fragment/Context/View])
.load(url)
.apply(requestOptions)
.into(imageView);
5.过渡

Transitions定义 Glide 如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡。

java 复制代码
Glide.with(context)
.load(URL)
.apply(requestOptions)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into((ImageView) holder.itemView);

Glide v4 将不会默认应用交叉淡入或任何其他的过渡效果。每个请求必须手动应用过渡。当待加载的图片包含透明像素时,禁用交叉淡入会导致动画完成后占位符在图片后面仍然可见。如果你在加载透明图片时使用了占位符,可以启用交叉淡入

java 复制代码
DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

Glide.with(context)
.load(URL)
.apply(requestOptions)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into((ImageView) holder.itemView);

为了提升性能,请在使用 Glide 向 ListView , GridView, 或 RecyclerView 加载图片时考虑避免使用动画。

6.变换

获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁或对位图应用过滤器。比如对图片进行圆角配置。
Glide.with(this)
.load(URL)
.transform(...)
.into(iv);

  1. CircleCrop :圆角
  2. RoundedCorners : 四个角度统一指定
  3. GranularRoundedCorners :四个角度单独指定
  4. Rotate :旋转
7.Generated API

Generated API 模式的设计出于以下两个目的:
1.集成库可以为 Generated API 扩展自定义选项。
2.在 Application 模块中可将常用的选项组打包成一个选项在 Generated API 中使用

1、添加 Glide 注解处理器的依赖

2.在 Application 模块中包含一个 AppGlideModule 的实现

java 复制代码
@GlideModule
public class MyGlideModule extends AppGlideModule {
}

3.当你第一次添加你的 AppGlideModule 或做了某些类型的修改后,你可能需要重新构建 (rebuild) 你的项目。无论何时,如果你发现 API 没有被 import ,或看起来已经过期,你可以通过以下方法重新构建:1.打开 Build 菜单;2.点击 Rebuild Project。

Glide.with() 替换为 GlideApp.with(),即可使用该 API 去完成加载工作。与 Glide.with() 不同,诸如 fitCenter()placeholder() 等选项在 Builder 中直接可用,并不需要再传入单独的RequestOptions对象。

java 复制代码
GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(R.drawable.placeholder)
   .fitCenter()
   .into(imageView);
8.GlideExtension与GlideOption

定义一个在频繁使用的选项集合。

java 复制代码
@GlideExtension
public class MyAppExtension {
    private MyAppExtension() {
    }

    @GlideOption
    public static BaseRequestOptions<?> defaultImg(BaseRequestOptions<?> options){
        return options
                .placeholder(R.drawable.p1)
                .error(R.drawable.e2)
                .fallback(R.drawable.f3)
                .override(100,100);

    }
}

使用对比:
GlideApp.with().load(). error(R.drawable.error).fallback(R.drawable.fallback)
GlideApp.with().load().defaultImg()
相关说明与资料请参考
Glide v4 : 快速高效的Android图片加载库 (muyangmin.github.io)
Glide v4 : Fast and efficient image loading for Android (bumptech.github.io)
GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui