android 当目标值改变时,如何获取当前animateFloatAsState值?

nhaq1z21  于 2023-03-27  发布在  Android
关注(0)|答案(1)|浏览(137)

我正在尝试用JetPack Compose动画做一些动画。我的例子需要一些帮助。

@Composable
fun RotateTest(
    inputRotation:Int, 
){

    val rotationAnim by animateFloatAsState(
        targetValue = inputRotation.toFloat(),
        animationSpec = tween(
            durationMillis = 5000
            )
        )
     
    Box(modifier = Modifier.size(100.dp).graphicsLayer {
        rotationZ = rotationAnim
    }, contentAlignment = Alignment.Center){
        Text(text = "rotating text")
    }
    
}

它工作正常,当新的输入到达时停止并重新启动。但是我发现静态持续时间有问题。5秒对于0到180度旋转很好,但是对于0到10度旋转很长。所以我决定将静态时间值更改为基于当前和目标旋转的值,如下所示:

...
animationSpec = tween(
            durationMillis = 
<current rotation - target rotation * speed modifier>
            )
        )
...

但我不明白如何获得当前的旋转值的动画。

at0kjp5o

at0kjp5o1#

你可以试试这样的方法:

val rotationAnim = remember { Animatable(inputRotation.toFloat()) }

LaunchedEffect(inputRotation) {
    val current = rotationAnim.value
    if (inputRotation.toFloat() != current) {
        rotationAnim.animateTo(
            inputRotation.toFloat(),
            tween(/* your calculation */),
        )
    }
}

相关问题