显示动画 GIF

动画 GIF 增强了沟通和自我表达,为对话添加了动态和引人入胜的元素,使用户能够比静态图像或纯文本更有效地传达情绪、反应和幽默。GIF 在在线文化的普及使其集成对于保持相关性和吸引期望现代功能和丰富多媒体体验的用户至关重要。

使用图像加载库显示动画 GIF

图像加载库为您承担了大部分繁重工作,通常会为动画 GIF 等功能添加向后兼容的支持。以下代码演示了如何使用 Coil 图像加载库 实现动画 GIF 播放。

添加 Coil 依赖项以支持 GIF

implementation("io.coil-kt:coil-gif:2.6.0")

使用平台 ImageDecoder 创建支持 GIF 的加载器,该加载器是在 Android 9(API 级别 28)中添加的,以及 Coil 的 GifDecoder,以实现向后兼容性。

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 动画和其他富媒体的支持的更多信息。