显示 GIF 动画

GIF 动画可以增强沟通和自我表达能力,为对话添加动态且富有吸引力的元素,让用户能够比单独使用静态图片或文字更有效地传达情感、回应和幽默。GIF 在网络文化中很受欢迎,因此其整合必不可少 保持相关性并吸引那些期望现代功能和 丰富的多媒体体验

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

图片加载库可以为您完成许多繁重工作,通常会为 GIF 动画等功能添加向后兼容的支持。以下 代码演示了如何使用 Coil 图片加载库

为 GIF 添加 Coil 依赖项

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 库依赖项以支持可绘制对象 Painter

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 动画和其他富媒体。