实际上我正在阅读这篇文章这里我的动画工作正常,但是当我只是在高程中使用该动画值时,动画甚至没有开始。我已经在阴影中使用了该动画值,它可以工作,但在高程中则不起作用。
我认为 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)
)
}
}
}
要将像素转换为 dp,您可以使用
value.toDp()
函数 Density
。
/**
* Convert an [Int] pixel value to [Dp].
*/
@Stable
fun Int.toDp(): Dp = (this / density).dp
Dp 通过像素值/设备密度计算。还有
animateDpAsState
函数可以在 dp 值之间进行动画处理。