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 或一个网络连接中加载数据,你需要加INTERNET和ACCESS_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

相关推荐
Brilliantwxx1 小时前
【STM32】 DMA 源码分析与实战(下):DMA 收发状态机与 HAL 分层
android·开发语言·stm32·单片机·嵌入式硬件·mcu
ao-weilai1 小时前
MySQL数据库:数据类型
android·数据库·mysql
天空之城--1 小时前
Android一周动态:Android 18首次官宣、Compose Material3 1.4转正(5趋势+5资讯)
android·人工智能·flutter·架构·android jetpack
恋猫de小郭1 小时前
Meta 分享怎么用 AI 迁移 Compose 项目不烧心
android·前端·flutter
纪念 2292 小时前
C++ string(一)
android·开发语言·c++
火柴就是我14 小时前
Flutter 项目本地 Maven 引入 AAR 找不到?一次 Gradle 路径问题排查
android
火柴就是我14 小时前
Android 打包报错 25.0.3
android·前端
码上有光14 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
Android打工仔18 小时前
Kotlin 协程源码解析:DispatchedContinuation 里的 Dispatcher 从哪里来?
android·kotlin
打工仔折腾 AI19 小时前
从BPE到SentencePiece:Transformer分词原理与Python实战对比
android·人工智能·python·深度学习·langchain·transformer·ai agent 实战