我如何在 Jetpack Compose 中将动画的两个部分链接在一起,以便偏移增加然后减少?
How to i chain two parts of an animation together in jetpack compose so the the offset increases then decreases?
我最近开始使用 jet pack compose 制作动画,我想知道如何制作它,以便当您增加偏移量中的值时,一旦动画达到该值,它就会将该值更改为另一个值。所以就像更新过渡一样,但不是同时,一个接一个。
也许你可以使用 Animatable
val value = remember { Animatable(0f) } //Initial Value
然后在撰写中你可以使用
value.animateTo(20f)
然后
value.animateTo(10f)
更多信息请访问官方documentation
实际上@RaBaKa 的回答部分正确,但缺少关于动画应该如何的信息运行。
它应该作为副作用来完成。例如,您可以使用 LaunchedEffect
:它已经在协程范围内 运行ning。 运行 一个接一个动画是完全正常的 - 一旦第一个暂停功能完成,第二个将开始:
val value = remember { Animatable(0f) }
LaunchedEffect(Unit) {
value.animateTo(
20f,
animationSpec = tween(2000),
)
value.animateTo(
10f,
animationSpec = tween(2000),
)
}
Text(value.value.toString())
如果您想响应某些动作(例如按下按钮)执行此操作,您需要自己 运行 协程。最主要的是 运行 将动画放在同一个协程中,以便它们被链接起来。
val value = remember { Animatable(0f) }
val scope = rememberCoroutineScope()
Button(onClick = {
scope.launch {
value.animateTo(
20f,
animationSpec = tween(2000),
)
value.animateTo(
10f,
animationSpec = tween(2000),
)
}
}) {
}
Text(value.value.toString())
正确答案是使用 Kotlin 协程。我设法让它工作正常。您必须使用协程才能以正确的顺序启动动画,如下所示:
animationRoutine.launch {
coroutineScope {
launch {
animate(
startingValue,
targetValue,
animationSpec = whatYouWant,
block = { value, _ -> whateverYouNeed = value }
)
}
launch {
animate(
initialValue,
targetValue,
animationSpec = whatYouWant,
block = { value, _ -> whateverYouNeed = value }
)
}
}
每个启动范围都以非阻塞方式启动所有内容,如果您告诉它允许您在较低级别一次 运行 多个动画并为动画排序您为下一部分添加另一个协程动画的。
我最近开始使用 jet pack compose 制作动画,我想知道如何制作它,以便当您增加偏移量中的值时,一旦动画达到该值,它就会将该值更改为另一个值。所以就像更新过渡一样,但不是同时,一个接一个。
也许你可以使用 Animatable
val value = remember { Animatable(0f) } //Initial Value
然后在撰写中你可以使用
value.animateTo(20f)
然后
value.animateTo(10f)
更多信息请访问官方documentation
实际上@RaBaKa 的回答部分正确,但缺少关于动画应该如何的信息运行。
它应该作为副作用来完成。例如,您可以使用 LaunchedEffect
:它已经在协程范围内 运行ning。 运行 一个接一个动画是完全正常的 - 一旦第一个暂停功能完成,第二个将开始:
val value = remember { Animatable(0f) }
LaunchedEffect(Unit) {
value.animateTo(
20f,
animationSpec = tween(2000),
)
value.animateTo(
10f,
animationSpec = tween(2000),
)
}
Text(value.value.toString())
如果您想响应某些动作(例如按下按钮)执行此操作,您需要自己 运行 协程。最主要的是 运行 将动画放在同一个协程中,以便它们被链接起来。
val value = remember { Animatable(0f) }
val scope = rememberCoroutineScope()
Button(onClick = {
scope.launch {
value.animateTo(
20f,
animationSpec = tween(2000),
)
value.animateTo(
10f,
animationSpec = tween(2000),
)
}
}) {
}
Text(value.value.toString())
正确答案是使用 Kotlin 协程。我设法让它工作正常。您必须使用协程才能以正确的顺序启动动画,如下所示:
animationRoutine.launch {
coroutineScope {
launch {
animate(
startingValue,
targetValue,
animationSpec = whatYouWant,
block = { value, _ -> whateverYouNeed = value }
)
}
launch {
animate(
initialValue,
targetValue,
animationSpec = whatYouWant,
block = { value, _ -> whateverYouNeed = value }
)
}
}
每个启动范围都以非阻塞方式启动所有内容,如果您告诉它允许您在较低级别一次 运行 多个动画并为动画排序您为下一部分添加另一个协程动画的。