【问题标题】:Animating drawLine using Jetpack Compose使用 Jetpack Compose 为 drawLine 设置动画
【发布时间】:2021-04-13 07:45:21
【问题描述】:

我正在动画drawLine如下

val animateFloat = remember { Animatable(0f) }
LaunchedEffect(animateFloat) {
    animateFloat.animateTo(
        targetValue = 1f,
        animationSpec = tween(durationMillis = 1000, easing = LinearEasing))
}

Canvas(modifier = Modifier.fillMaxSize() ) {
    onDraw = {
        drawLine(
            color = Color.Black,
            Offset(size.width / 4, size.height / 6)
            Offset(size.width / 4, (size.height / 6 + SCAFFOLD_HEIGHT) * animateFloat.value),
            strokeWidth = 2f
        )
    }
}

这绝对没问题。但是当我在条件检查中添加它时,如下所示,

if(lives == 5){
    drawLine(
        color = Color.Black,
        Offset(size.width / 4, size.height / 6)
        Offset(size.width / 4, (size.height / 6 + SCAFFOLD_HEIGHT) * animateFloat.value),
        strokeWidth = 2f
    )
}

线条已绘制,但无法设置动画。请让我知道引擎盖下可能发生的事情。 Compose_version = 1.0.0-beta04

【问题讨论】:

  • 您使用的是哪个版本的 compose?
  • 编写 1.0.0-beta04

标签: android kotlin android-jetpack-compose


【解决方案1】:

我不确定你想要实现什么...但假设你想要动画以防万一lives == 5,你只需要用你的条件包装LaunchedEffect。 例如:

@Composable
fun LineAnimation(lives: Int) {
    val animVal = remember { Animatable(0f) }
    if (lives > 5) {
        LaunchedEffect(animVal) {
            animVal.animateTo(
                targetValue = 1f,
                animationSpec = tween(durationMillis = 1000, easing = LinearEasing)
            )
        }
    }
    Canvas(modifier = Modifier.size(200.dp, 200.dp)) {
        drawLine(
            color = Color.Black,
            start = Offset(0f, 0f),
            end = Offset(animVal.value * size.width, animVal.value * size.height),
            strokeWidth = 2f
        )
    }
}

在您调用此 Composable 的地方,您可以执行以下操作:

@Composable
fun AnimationScreen() {
    var count by remember {
        mutableStateOf(0)
    }
    Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
        Button(onClick = { count++ }) {
            Text("Count $count")
        }
        LineAnimation(count)
    }
}

这是结果:

【讨论】:

  • 非常感谢。对于每一个计数,我都想画一条不同的线。当然,我会检查我如何才能让它发挥作用。
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
相关资源
最近更新 更多