首页 > 解决方案 > 当我重新启动动画时,如何重置 JetpackCompose AnimatedFloat 的初始值?

问题描述

我有一个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 开始。它从之前停止的值开始。不仅如此,从之前停止的位置到 targetValue 需要相同的时间,例如,如果它在 0.7f 处停止,那么从 到 开始需要 2 秒0.7f1.0f这会减慢变化率。

initialValue停止后如何重置?

标签: androidandroid-jetpack-compose

解决方案


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

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


推荐阅读