Android 基于尺寸设置动画

Android 基于尺寸设置动画,android,kotlin,android-jetpack-compose,Android,Kotlin,Android Jetpack Compose,我想根据固定的值和可组合的$width设置可组合的动画。 如何获取$width以将其用于动画功能? 这是我的密码 @Composable fun ExpandingCircle() { val (checked, setChecked) = remember { mutableStateOf(false) } val radius = if (checked) **$width** else 4.dp val radiusAnimated = animate(radius

我想根据固定的值和可组合的$width设置可组合的动画。 如何获取$width以将其用于动画功能? 这是我的密码

@Composable
fun ExpandingCircle() {
    val (checked, setChecked) = remember { mutableStateOf(false) }
    val radius = if (checked) **$width** else 4.dp
    val radiusAnimated = animate(radius)
    Canvas(
        modifier = Modifier.fillMaxSize()
            .clickable(onClick = { setChecked(!checked) }),
        onDraw = {
            drawCircle(color = Color.Black, radius = radiusAnimated.toPx())
        }
    )
}

我们可以从
DrawScope
中获得大小,从大小我们可以获得画布的宽度和高度,因此您可以像这样制作动画

@Composable
fun ExpandingCircle() {
    val (checked, setChecked) = remember { mutableStateOf(false) }
    val unCheckedRadius = 4.dp
    Canvas(
        modifier = Modifier.fillMaxSize()
            .clickable(onClick = { setChecked(!checked) }),
        onDraw = {
            val width = size.width
            drawCircle(color = Color.Black, radius = if (checked) width/2 else unCheckedRadius.toPx())
        }
    )
}

我意识到我不需要已经设置动画的宽度,但我可以使用动画/插值浮点来使用它在绘图范围中进行计算

@Composable
fun ExpandingCircle() {
    val (checked, setChecked) = remember { mutableStateOf(false) }
    val radiusExpandFactor = if (checked) 1f else 0f
    val radiusExpandFactorAnimated = animate(radiusExpandFactor)
    Canvas(
        modifier = Modifier.fillMaxSize()
            .clickable(onClick = { setChecked(!checked) }),
        onDraw = {
            val radius = 4.dp.toPx() + (radiusExpandFactorAnimated * (size.width / 2 - 4.dp.toPx()))
            drawCircle(color = Color.Black, radius = radius)
        }
    )
}

这不会在值之间设置动画,是吗?