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
相关产品推荐
相关产品推荐

