首页 > 解决方案 > 如何在没有 onActive 的情况下启动自动启动动画,并为 animatedFloatAsState 设置初始值

问题描述

在过去(在 alpha11 之前),我可以在触发可组合函数时将值从 0 设置为 1,如下所示,我可以在其中设置initialValue并拥有onActivewith aniumateTo

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

val t = animatedProgress.value

但是,现在在 alpha13 中,我找不到设置initialValue, 或animateTo. 现在onActive也已弃用。

我编码如下

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

我怎样才能...

标签: androidandroid-jetpack-compose

解决方案


您可以使用AnimatableAPI 和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)
        ))
}

在此处输入图像描述


推荐阅读