Android 基于尺寸设置动画
我想根据固定的值和可组合的$width设置可组合的动画。 如何获取$width以将其用于动画功能? 这是我的密码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
@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)
}
)
}
这不会在值之间设置动画,是吗?