You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Compose Multiplatform中嵌入并播放Lottie动画?

在Compose Multiplatform中嵌入Lottie动画

核心问题解答

有适用于Compose Multiplatform(CMP)的Lottie库,Airbnb官方提供了lottie-compose-multiplatform,支持Android、iOS、桌面(Windows/Linux/macOS)、Web(JS/WASM)全平台。


嵌入步骤

1. 添加依赖

在模块级build.gradle.kts中引入最新版本的库:

dependencies {
    implementation("com.airbnb.android:lottie-compose-multiplatform:6.4.0") // 替换为最新版本号
}

2. 准备资源

将通过Bodymovin导出的Lottie JSON文件,放在项目的commonMain/resources目录下,确保所有平台都能访问该资源。

3. 加载并显示动画

基础播放

在通用Compose代码中直接使用组件加载动画:

import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.rememberLottieComposition

@Composable
fun BasicLottieDemo() {
    val composition = rememberLottieComposition(
        spec = LottieCompositionSpec.RawRes(R.raw.your_animation_file) // 替换为你的JSON资源名
    )
    
    LottieAnimation(composition = composition.value)
}

控制播放状态

如需循环播放、从头触发等控制逻辑,使用rememberLottieAnimatable:

import com.airbnb.lottie.compose.*
import androidx.compose.runtime.LaunchedEffect

@Composable
fun ControllableLottie() {
    val composition = rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.your_animation_file))
    val animatable = rememberLottieAnimatable()
    
    // 动画加载完成后启动循环播放
    LaunchedEffect(composition.value) {
        composition.value?.let {
            animatable.animate(
                composition = it,
                iterations = LottieConstants.IterateForever
            )
        }
    }
    
    LottieAnimation(animatable = animatable)
}

各平台注意事项

  • Android/iOS/桌面:资源放在commonMain/resources即可自动识别,无需额外配置。
  • Web:JSON资源会被自动打包,JS/WASM环境下可直接加载,无需特殊处理。

相关问题补充

  • Android端从头播放:触发事件时调用animatable.snapTo(0f)重置进度,再重新启动动画即可。
  • 跨平台资源共享:将Lottie JSON放在commonMain/resources,所有平台可直接访问,无需重复复制资源。

内容的提问来源于stack exchange,提问作者Mahozad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:52:40