显示 GIF 动画

GIF 动画可增强沟通效果和自我表达, 在对话中加入引人入胜的元素,让用户能够传达情感、 与单纯使用静态图片或纯文字图片相比,采用更有效的方式进行回应和幽默感。 GIF 在线上文化中的普及性使得集成 GIF 至关重要,因为这有助于您紧跟时代潮流,吸引期待获得现代功能和丰富多媒体体验的用户。

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

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

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

implementation("com.google.accompanist:accompanist-drawablepainter:0.35.0-alpha")

创建一个方法,用于使用 ImageDecoder 将 GIF 动画加载到 AnimatedImageDrawable

private fun createAnimatedImageDrawableFromImageDecoder(context: Context, uri: Uri): AnimatedImageDrawable {
    val source = ImageDecoder.createSource(context.contentResolver, uri)
    val drawable = ImageDecoder.decodeDrawable(source)
    return drawable as AnimatedImageDrawable
}

rememberDrawablePainterAnimatedImageDrawable 搭配使用:

Image(
    painter = rememberDrawablePainter(
        drawable = createAnimatedImageDrawableFromImageDecoder(applicationContext, mediaUri)),
     contentDescription = "animated gif"
)

支持通过图片键盘和其他富媒体内容发送 GIF 文件

GIF 动画文件是许多 Android 键盘的热门功能,包括 Google 推出的 Gboard。目前建议采用的方法支持任何类型的 贴纸或动画,无论是来自输入法还是其他输入法 就是使用 OnReceiveContentListener

请参阅接收富媒体内容,详细了解如何实现对 在您的应用中接收 GIF 动画和其他富媒体。