Android 在Jetpack Compose中添加gif

Android 在Jetpack Compose中添加gif,android,kotlin,gif,android-jetpack,android-jetpack-compose,Android,Kotlin,Gif,Android Jetpack,Android Jetpack Compose,我有一个gif,我想放在我的应用程序中。我知道如何插入图像资源,但当我尝试添加gif时,它会变成静态图像 DrawImage(image = +imageResource(R.drawable.gif)) 有没有人尝试过在Jetpack Compose中添加gif,因为如何在线查找文档很困难?我能够使用以下代码在Compose0.1.0-dev16中显示动画gif(摘自并修改): 导入android.graphics.drawable.Animatable 导入android.graphics

我有一个gif,我想放在我的应用程序中。我知道如何插入图像资源,但当我尝试添加gif时,它会变成静态图像

DrawImage(image = +imageResource(R.drawable.gif))

有没有人尝试过在Jetpack Compose中添加gif,因为如何在线查找文档很困难?

我能够使用以下代码在Compose
0.1.0-dev16
中显示动画gif(摘自并修改):

导入android.graphics.drawable.Animatable
导入android.graphics.drawable.drawable
导入android.os.Build.VERSION.SDK\u INT
导入androidx.annotation.Px
导入安卓
导入androidx.compose.runtime*
导入androidx.compose.ui.Modifier
导入androidx.compose.ui.WithConstraints
导入androidx.compose.ui.geometry.Size.Companion.Zero
导入androidx.compose.ui.graphics.ImageAsset
导入androidx.compose.ui.graphics.asImageAsset
导入androidx.compose.ui.platform.ContextAmbient
导入androidx.compose.ui.unit.Constraints.Companion.Infinity
导入androidx.core.graphics.drawable.toBitmap
导入androidx.ui.tooling.preview.preview
导入coil.ImageLoader
导入coil.decode.gif解码器
导入coil.decode.imagedecoder
导入coil.request.CachePolicy
导入coil.request.LoadRequest
导入coil.request.LoadRequestBuilder
导入coil.size.Scale
导入coil.target.target
导入kotlinx.coroutines*
@组合的
有趣的聚会(
型号:任何,
修饰符:修饰符=修饰符,
自定义:LoadRequestBuilder。(->Unit={}
) {
WithConstraints(修饰符){
变宽=
if(constraints.maxWidth>Zero.width&&constraints.maxWidthZero.height&&constraints.maxHeight=28){
添加(ImageDecoderCoder())
}否则{
添加(gif解码器())
}
}.build()
val request=LoadRequest.Builder(上下文)
.数据(模型)
.尺寸(宽度、高度)
.刻度(刻度.填充)
.diskCachePolicy(CachePolicy.ENABLED)
.apply{customize(this)}
.目标(target)
val requestDisposable=loader.execute(request.build())
昂迪斯波{
image.value=ImageAsset(宽度、高度)
requestdispose.dispose()
动画作业?.cancel()
}
}
图像(修改器=修改器,资产=图像.value)
}
}
内部可变状态。更新(可绘制:可绘制,@Px宽度:Int?=null,@Px高度:Int?=null):作业?{
如果(可绘制是可设置动画的){
(可绘制为可设置动画)。开始()
返回GlobalScope.launch(Dispatchers.Default){
while(true){
val资产=drawable.toBitmap(
宽度=宽度?:drawable.intrinsicWidth,
高度=高度?:可绘制。内部高度)
.asImageAsset()
withContext(Dispatchers.Main){
价值=资产
}
延迟(16)
//1000 ms/60 fps=16.666 ms/fps
//TODO:找出显示gif的最有效方法
}
}
}否则{
值=drawable.toBitmap(
宽度=宽度?:drawable.intrinsicWidth,
高度=高度?:可绘制。内部高度)
.asImageAsset()
返回空
}
}
这取决于线圈:

implementation 'io.coil-kt:coil:0.11.0'
implementation 'io.coil-kt:coil-gif:0.11.0'
使用方法如下:

setContent {
  CoilImage("https://example.com/image.gif")
}
可以将-Utils库用于加载可组合文件的所有图像

这里Glide支持GIF

您可以这样使用它:

GlideImage(
        data = R.drawable.giphy,
        contentDescription = ""
    )

快速问题
通常这些问题最难回答:)@a_local_似乎没有人经常这样做:)我还没有自己写过作文,但我觉得这可能是一个非常好的问题,因为它甚至不可能,因此我发表了评论(以及我的投票)。这都是无关的谈话(某人