gpt4 book ai didi

android - 如何改进我的动画并使其均匀(Jetpack Compose)?

转载 作者:行者123 更新时间:2023-12-05 00:13:13 24 4
gpt4 key购买 nike

我正在尝试从下到上定期发射一些 Box。我几乎已经做到了这一点,但由于某种原因,我的盒子没有均匀分布,正如您从 gif 中看到的那样。我的感觉是我的代码不是实现我想要做的事情的最佳方式。有人有什么想法吗?

这是我的代码:

listOf(
Color(0xffDFFF00),
Color(0xffFFBF00),
Color(0xffFF7F50),
Color(0xffDE3163),
Color(0xff9FE2BF),
Color(0xff40E0D0),
Color(0xff6495ED),
Color(0xffCCCCFF),
).forEachIndexed { index, color ->
val infiniteTransition = rememberInfiniteTransition()
val positionState = infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = 1f,
animationSpec = infiniteRepeatable(
animation = tween(
durationMillis = 2500,
delayMillis = delay,
easing = LinearEasing
)
)
)
delay += 1000
val modifier = Modifier.offset(
x = (maxWidth - tileSize),
y = maxHeight - (maxHeight * positionState.value),
)
Box(
modifier = modifier
.size(tileSize)
.clip(RoundedCornerShape(5.dp))
.background(color = color)
) {
Text(
text = text,
Modifier.align(Alignment.Center),
style = TextStyle(fontWeight = FontWeight.Bold)
)
}

这是动图:

Uneven boxes

PS:现在已经尝试了接受的答案,它没有按预期工作。请参阅下面的评论。谢谢!

最佳答案

这是因为 delay 也在 infiniteRepeatable 中重复。换句话说,第一次迭代中相隔 1000 毫秒的动画在第二次迭代中变为 2000 毫秒。

无限过渡尚不支持非重复延迟。这里我推荐使用Animatable来实现交错的无限动画。

...
forEachIndexed { index, color ->
val positionAnimation = remember { Animatable(0f) }
LaunchedEffect(positionAnimation) {
delay(1000 * index) // this delay increases with the index
launch {
positionAnimation.animateTo(
1f,
animationSpec = infiniteRepeatable(
animation = tween(
durationMillis = 2500, // remove the delay from infinite repeatable
easing = LinearEasing
)
)
)
}
}
...

关于android - 如何改进我的动画并使其均匀(Jetpack Compose)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67661974/

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