首页 > 解决方案 > Jetpack Compose 无限重复,重复 startDelay

问题描述

我想创建一个一次性的无限start delay动画Jetpack Compose

我用过infiniteRepeatable()tween()

val value by rememberInfiniteTransition().animateFloat(
    initialValue = 0f,
    targetValue = 1f,
    animationSpec = infiniteRepeatable(
        animation = tween(
            durationMillis = 700,
            delayMillis = 200
        )
    )
)

在这种情况下,delayMillis将重复:

*delay* 0..1, *delay* 0..1, *delay* 0..1 , *delay* 0..1  ...

ValueAnimator其中start delay是一次性延迟:

val animator = ValueAnimator.ofFloat(0f, 1f).apply {
    duration = 700
    startDelay = 200
    repeatCount = ValueAnimator.INFINITE
    addListener { /* value */ }
}
animator.start()
*delay* 0..1, 0..1, 0..1, 0..1, 0..1, 0..1, 0..1  ...

InfiniteRepeatable有没有办法为in设置一次性启动延迟Jetpack Compose

谢谢

标签: androidandroid-animationandroid-jetpack-compose

解决方案


目前 ( 1.0.0-beta07) 不支持非重复延迟。

您可以将动画更改为:

val animatedFloat = remember { Animatable(0f) }

LaunchedEffect(animatedFloat) {
    delay(200) // to avoid repeated delays
    animatedFloat.animateTo(
        targetValue = 1f, animationSpec = infiniteRepeatable(
            animation = tween(700, easing =  FastOutSlowInEasing),
            repeatMode = RepeatMode.Reverse
        )
    )
}

推荐阅读