将 float 转换为无限动画中卡片标高的 dp

问题描述 投票:0回答:1

实际上我正在阅读这篇文章这里我的动画工作正常,但是当我只是在高程中使用该动画值时,动画甚至没有开始。我已经在阴影中使用了该动画值,它可以工作,但在高程中则不起作用。

我认为 dp 中的 float 转换存在一些问题,我看到很多答案,但它们是在 java 中。

现在代码在这里

@Composable
fun Greeting(modifier: Modifier = Modifier) {
    Column(
        modifier =  Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally ,
        verticalArrangement = Arrangement.Center
    ){

        val infiniteTransition = rememberInfiniteTransition(label = "")
        val value by infiniteTransition.animateFloat(
            initialValue = 20f,
            targetValue = 200f,
            animationSpec = infiniteRepeatable(
                animation = tween(
                    durationMillis = 400,
                ),
                repeatMode = RepeatMode.Reverse
            ), label = ""
        )
        // Convert the floating-point value to a dimension value
        val elevationValue = with(LocalDensity.current) { value.dp }
        Card(
            modifier = Modifier.padding(30.dp)
                //.shadow(elevationValue)
                    ,
            elevation = CardDefaults.cardElevation(elevationValue) ,
            shape = RectangleShape,
        ){
            Text(
                text =
                "Infinite Animation ",
                fontSize = 30.sp,
                textAlign = TextAlign.Center,
                modifier = Modifier.padding(10.dp)
            )
        }
    }
}
android android-jetpack-compose android-animation
1个回答
0
投票

要将像素转换为 dp,您可以使用

value.toDp()
函数
Density

/**
 * Convert an [Int] pixel value to [Dp].
 */
@Stable
fun Int.toDp(): Dp = (this / density).dp

Dp 通过像素值/设备密度计算。还有

animateDpAsState
函数可以在 dp 值之间进行动画处理。

© www.soinside.com 2019 - 2024. All rights reserved.