重新启动动画时,如何重置JetpackCompose AnimatedFloat的初始值?

时间:2020-10-14 06:02:09

标签: android android-jetpack-compose

我有一个AnimatedFloat是我使用创建的

val animatedFloat = animatedFloat(0f)

我使用以下动画开始

animatedFloat.animateTo(
        targetValue = 1f,
        anim = repeatable(
                iterations = AnimationConstants.Infinite,
                animation = tween(durationMillis = 2000, easing = LinearEasing),
        )
)

所有这些都起作用,并且它在2秒内开始从0f移到1f。

当我使用以下命令停止它时,它会停止运行。

animatedFloat.stop()

但是,当我使用相同的animateTo函数重新启动它时,

animatedFloat.animateTo(
        targetValue = 1f,
        anim = repeatable(
                iterations = AnimationConstants.Infinite,
                animation = tween(durationMillis = 2000, easing = LinearEasing),
        )
)

它不再从0f开始。它从先前停止的值开始。不仅如此,从先前停下来到目标值所需的时间也相同 例如如果它在0.7f处停止,则从0.7f1.0f将需要2秒钟的时间,这会减慢更改速度。

停止initialValue后如何重置?

2 个答案:

答案 0 :(得分:1)

stop函数只是停止动画,它不会重置该值。 您可以使用animatedFloat.snapTo(0f)将值立即设置为0f,而无需任何动画。

https://developer.android.com/reference/kotlin/androidx/compose/animation/core/AnimatedFloat#snapto

答案 1 :(得分:0)

AnimatedFloat围绕流动性而设计。它假定在​​大多数情况下,跳过到另一个值是不理想的。这就是为什么它会停在原处,并在下次调用animateTo时从停下来的地方开始。您能否分享暂停/恢复动画的用例?