我正在使用Jetpack Compose实现“逐渐增长的线”的要求,即从指定的起始点开始,逐渐“增长”到达指定的终点的线条。
我之前使用自定义视图实现了这个功能,效果很好。但是我的逻辑需要根据某些条件不断地重新调用"onDraw()"方法。在使用自定义视图时,我使用了"invalidate()"方法来实现这一点。但是现在我正在使用Jetpack Compose,却无法找到重新组合“Canvas”的方法。
以下是我的Jetpack Compose代码示例:
请建议一种重新组合Canvas的方法,或者其他使我的逻辑能够工作的方式。
我之前使用自定义视图实现了这个功能,效果很好。但是我的逻辑需要根据某些条件不断地重新调用"onDraw()"方法。在使用自定义视图时,我使用了"invalidate()"方法来实现这一点。但是现在我正在使用Jetpack Compose,却无法找到重新组合“Canvas”的方法。
以下是我的Jetpack Compose代码示例:
@Composable
fun SplashUI() {
var test = remember { mutableStateOf(0) }
Canvas(modifier = Modifier.fillMaxSize()) {
// starting point
x1 = 0.0;
y1 = size.height / 2.0;
// ending point
x2 = size.width.toDouble()
y2 = size.height / 2.0;
divideLineIntoEqualParts();
if (test.value < listOfPoints.size) {
drawLine(
Color.Black,
Offset(
listOfPoints.get(0)?.x!!,
listOfPoints.get(0)?.y!!
),
Offset(
listOfPoints.get(inte)?.x!!,
listOfPoints.get(inte)?.y!!
),
strokeWidth = 5f
);
}
test.value = test.value + 1 //This doesn't trigger recomposition of canvas
//Recomposition of Canvas should happen after the above step for my logic to work
//I had implemented this earlier using custom view, and used 'invalidate()' like:
/* if (inte < listOfPoints.size) {
invalidate()
}*/
}
}
private fun divideLineIntoEqualParts() {
listOfPoints.clear()
for (k in 1..50) {
listOfPoints.add(PointF((x1 + k * (x2 - x1) / 50).toFloat(),
(y1 + k * (y2 - y1) / 50).toFloat()
))
}
Log.d("listOfPoints : size : ", listOfPoints.size.toString() + "")
}
请建议一种重新组合Canvas的方法,或者其他使我的逻辑能够工作的方式。