jetpack compose Lottie addAnimataionListener
jetpack compose Lottie addAnimataionListener
我想在 Jetpack Compose 中使用 Lottie。
这是我的代码
val logoAnimationComposition by rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(
resId = R.raw.twitter_logo_motion
)
)
val logoAnimationProgress by animateLottieCompositionAsState(
composition = logoAnimationComposition,
isPlaying = true
)
LottieAnimation(
modifier = Modifier.size(
size = logoSize
),
composition = logoAnimationComposition,
progress = logoAnimationProgress
)
我需要知道这个动画什么时候结束。
我可以用我从我们的 ui 设计师那里知道的动画持续时间来处理它
但这不是一个好方法。
并且文档没有说明任何相关内容。
我能做什么?
在 Compose 中,我们不使用侦听器,而是必须读取状态并对它的变化做出反应。
您需要从 animateLottieCompositionAsState
中删除委派,然后您可以访问更多信息,例如您可以检查 isAtEnd
。
使用简单的 if
您可以显示其他视图或使用 side effects:
做一些工作
val logoAnimationState = animateLottieCompositionAsState(
composition = logoAnimationComposition,
isPlaying = true
)
LottieAnimation(
modifier = Modifier.size(
size = logoSize
),
composition = logoAnimationComposition,
progress = logoAnimationState.progress
)
if (logoAnimationState.isAtEnd) {
LaunchedEffect(Unit) {
// to your job
}
}
我想在 Jetpack Compose 中使用 Lottie。 这是我的代码
val logoAnimationComposition by rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(
resId = R.raw.twitter_logo_motion
)
)
val logoAnimationProgress by animateLottieCompositionAsState(
composition = logoAnimationComposition,
isPlaying = true
)
LottieAnimation(
modifier = Modifier.size(
size = logoSize
),
composition = logoAnimationComposition,
progress = logoAnimationProgress
)
我需要知道这个动画什么时候结束。
我可以用我从我们的 ui 设计师那里知道的动画持续时间来处理它 但这不是一个好方法。
并且文档没有说明任何相关内容。
我能做什么?
在 Compose 中,我们不使用侦听器,而是必须读取状态并对它的变化做出反应。
您需要从 animateLottieCompositionAsState
中删除委派,然后您可以访问更多信息,例如您可以检查 isAtEnd
。
使用简单的 if
您可以显示其他视图或使用 side effects:
val logoAnimationState = animateLottieCompositionAsState(
composition = logoAnimationComposition,
isPlaying = true
)
LottieAnimation(
modifier = Modifier.size(
size = logoSize
),
composition = logoAnimationComposition,
progress = logoAnimationState.progress
)
if (logoAnimationState.isAtEnd) {
LaunchedEffect(Unit) {
// to your job
}
}