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

Android Jetpack Compose中如何为Lottie动画添加动画监听器?

Jetpack Compose Lottie 动画监听器实现方案

在Jetpack Compose中使用Lottie动画,需要通过LottieAnimatable(或LottieAnimationState)来监听动画的生命周期事件,可以完全覆盖View体系中AnimatorListener的所有回调能力,具体实现如下:

你原有代码中判断LottieCompositionResult.Success只是监听动画资源加载完成的回调,和动画播放完成是两个完全不同的逻辑,不要混淆。

完整实现代码

@Composable
fun PlayView() {
    // 加载Lottie动画资源
    val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.play_anim))
    // 创建动画状态控制实例
    val animationState = rememberLottieAnimatable()

    // 资源加载完成后自动启动动画
    LaunchedEffect(composition) {
        animationState.animate(
            composition = composition,
            // 配置播放次数,1代表只播放一次,设置为LottieConstants.IterateForever代表循环播放
            iterations = 1
        )
    }

    // 监听动画状态,实现各类回调
    LaunchedEffect(animationState.isAtEnd, animationState.isPlaying, animationState.iteration) {
        // 动画播放完成回调(对应AnimatorListener#onAnimationEnd)
        if (animationState.isAtEnd) {
            // 在这里执行你需要的播放完成后逻辑
            // start the next flow
        }

        // 可选:动画开始回调(对应AnimatorListener#onAnimationStart)
        if (animationState.isPlaying && animationState.progress == 0f) {
            // 动画开始逻辑
        }

        // 可选:动画重复回调(对应AnimatorListener#onAnimationRepeat)
        if (animationState.iteration > 0) {
            // 动画重复播放逻辑
        }

        // 可选:动画取消回调(对应AnimatorListener#onAnimationCancel)
        if (!animationState.isPlaying && !animationState.isAtEnd && animationState.progress > 0f) {
            // 动画取消逻辑
        }
    }

    LottieAnimation(
        composition = composition,
        progress = { animationState.progress },
        modifier = Modifier
            .fillMaxHeight()
            .fillMaxWidth()
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:54:03