如何在没有 onActive 的情况下开始自动启动动画,并设置 animatedFloatAsState 的初始值

How can I start auto start an animation without onActive, and set the initial value for animatedFloatAsState

过去(在 alpha11 之前),我可以在触发可组合函数时将值设置为从 0 到 1 的动画,如下所示,我可以在其中设置 initialValue 以及 onActiveaniumateTo.

val animatedProgress = animatedFloat(0f)
onActive {
    animatedProgress.animateTo(
        targetValue = 1f,
        anim = infiniteRepeatable(
            animation =
                tween(durationMillis = 2000, easing = LinearEasing),
        )
    )
}

val t = animatedProgress.value

但是,现在在 alpha13 中,我找不到设置 initialValueanimateTo 的方法。 onActive 现在也已弃用。

我编码如下

    val floatAnimation = animateFloatAsState(
        targetValue = 1f,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis = 2000, easing = LinearEasing),
        )
    )

我怎样才能...

看来我必须使用布尔值来更改状态并使用 LaunchEffect 启动并更改状态,如下所示。

    var start by remember{ mutableStateOf(false) }

    val floatAnimation = animateFloatAsState(
        targetValue = if (start) 1f else 0f,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis = 2000, easing = LinearEasing),
        )
    )
    LaunchedEffect(true) {
        start = true
    }

    val t = floatAnimation.value

不确定这是否是最好的编码方式。

您可以使用 Animatable API 和 LaunchedEffect 可组合项。启动动画不需要布尔值。

类似于:

val animatedAlpha = remember { Animatable(0f) }

Box(
    Modifier
        .background(color = (Color.Blue.copy(alpha = animatedAlpha.value)))
        .size(100.dp,100.dp)

)

LaunchedEffect(animatedAlpha) {
    animatedAlpha.animateTo(1f,
        animationSpec = infiniteRepeatable(
            animation = tween(durationMillis = 2000, easing = LinearEasing)
        ))
}