gpt4 book ai didi

android - 如何正确等待动画结束?

转载 作者:行者123 更新时间:2023-12-03 08:10:31 25 4
gpt4 key购买 nike

我知道我可以使用 progress 跟踪 lottie 动画完成的时刻。但问题是我想在动画完全完成的那一刻开始一个新的屏幕。

这是我的动画代码

@Composable
fun AnimatedScreen(
modifier: Modifier = Modifier,
rawId: Int
) {
Box(
contentAlignment = Alignment.Center,
modifier = modifier.fillMaxSize()
) {
val compositionResult: LottieCompositionResult = rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(rawId)
)
AnimatedScreenAnimation(compositionResult = compositionResult)
}
}

@Composable
fun AnimatedScreenAnimation(compositionResult: LottieCompositionResult) {

val progress by animateLottieCompositionAsState(composition = compositionResult.value)

Column {
if (progress < 1) {
Text(text = "Progress: $progress")
} else {
Text(
modifier = Modifier.clickable { },
text = "Animation is done"
)
}
LottieAnimation(
composition = compositionResult.value,
progress = progress,
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.FillBounds
)
}
}

这是我的屏幕代码,我想等待动画结束,然后转到新屏幕:

@Composable
fun SplashScreen(
navController: NavController,
modifier: Modifier = Modifier,
viewModel: SplashScreenViewModel = getViewModel()
) {
val resIdState = viewModel.splashScreenResId.collectAsState()

val resId = resIdState.value
if (resId != null) {
AnimatedScreen(modifier = modifier, rawId = resId)
}

LaunchedEffect(true) {
navigate("onboarding_route") {
popUpTo(0)
}
}
}

最佳答案

我使用了progress并听取了它的更新,一旦达到1f我就会调用我的函数。

示例:

@Composable
fun Splash() {
LottieTest {
// Do something here
}
}

@Composable
fun LottieTest(onComplete: () -> Unit) {
val composition: LottieCompositionResult =
rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.camera))
val progress by animateLottieCompositionAsState(
composition.value,
iterations = 1,
)

LaunchedEffect(progress) {
Log.d("MG-progress", "$progress")
if (progress >= 1f) {
onComplete()
}
}

LottieAnimation(
composition.value,
progress,
)
}

注意:这就是我所做的。最好的方法仍然未知(至少对我来说)。我觉得它缺少这方面的样本。

此外,您可以从中进行很多修改并专注于核心流程。

关于android - 如何正确等待动画结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70985996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com