动画 GIF 可以增强沟通和自我表达,为对话增添活力和趣味,让用户能够比静态图像或纯文本更有效地传达情感、反应和幽默。GIF 在网络文化中的流行使其集成成为必不可少的一部分,以便保持相关性和吸引力,满足用户对现代功能和丰富多媒体体验的期望。
使用图像加载库显示动画 GIF
图像加载库为您完成了许多繁重的工作,通常会添加对动画 GIF 等功能的反向兼容支持。以下代码演示了如何使用 Coil 图像加载库 实现动画 GIF 播放。
添加 GIF 的 Coil 依赖项
implementation("io.coil-kt:coil-gif:2.6.0")
**使用平台 ImageDecoder(在 Android 9(API 级别 28)中添加)和 Coil 的 GifDecoder 创建支持 GIF 的加载器**,以实现向后兼容性。
val gifEnabledLoader = ImageLoader.Builder(this)
.components {
if ( SDK_INT >= 28 ) {
add(ImageDecoderDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
}.build()
在您的 Coil AsyncImage 组合中使用 gifEnabledLoader。
AsyncImage(
imageLoader = gifEnabledLoader,
...
)
使用 Android 平台支持显示动画 GIF
AsyncImage(
model = request,
imageLoader = videoEnabledLoader,
contentDescription = null
)
Android 9+(API 级别 28)内置支持动画 GIF 文件。借助 Accompanist 库 的一些帮助,Jetpack Compose 只需几行代码即可播放这些动画。
添加 Accompanist 库依赖项以支持可绘制画笔。
implementation("com.google.accompanist:accompanist-drawablepainter:0.35.0-alpha")
**创建一个将动画 GIF 加载到 AnimatedImageDrawable 中的方法**,使用 ImageDecoder。
private fun createAnimatedImageDrawableFromImageDecoder(context: Context, uri: Uri): AnimatedImageDrawable {
val source = ImageDecoder.createSource(context.contentResolver, uri)
val drawable = ImageDecoder.decodeDrawable(source)
return drawable as AnimatedImageDrawable
}
**将 rememberDrawablePainter 与 AnimatedImageDrawable
一起使用**。
Image(
painter = rememberDrawablePainter(
drawable = createAnimatedImageDrawableFromImageDecoder(applicationContext, mediaUri)),
contentDescription = "animated gif"
)
支持来自图像键盘和其他富媒体内容的 GIF 文件
动画 GIF 文件是许多 Android 键盘(包括 Google 的 Gboard)中的流行功能。目前推荐支持任何类型的贴纸或动画(无论来自输入法还是其他应用)的方式是使用OnReceiveContentListener
。
请参阅接收富媒体内容,了解如何在您的应用中实现对接收 GIF 动画和其他富媒体的支持。