gpt4 book ai didi

android - Jetpack Compose 中的 Canvas 重构

转载 作者:行者123 更新时间:2023-12-04 07:50:13 43 4
gpt4 key购买 nike

我正在使用 Jetpack Compose 来实现绘制“逐渐增长线”的要求,即从指定起点和点开始并逐渐“增长”直到到达指定终点的线。
我之前用自定义 View 实现了这个,效果很好。我的逻辑要求根据某些条件一次又一次地重新调用“onDraw()”。为此,我在使用自定义 View 时使用了“invalidate()”。但现在我正在使用 Jetpack Compose,无法找到重新组合“Canvas”的方法。
这是我的 Jetpack 编写“渐进线”的代码:

   @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 的方法,或其他一些使我的逻辑工作的方法。

最佳答案

我同意 Gabriele Mariotti 的回答,但我发现有时您需要控制以便能够随时在 Canvas 中重绘!
我正在尝试开发一个用于绘图的应用程序,当触摸事件发生时,我必须使之无效!
在这篇文章中Simple Jetpack Drawing App Canvas 因 MotionEvent 的 Action 变化而失效,因此每次 Action 事件的 Action 发生变化时, Canvas 都可以失效(重绘)
我们可以使用相同的逻辑

var invalidations by remember{
mutableStateOf(0)
}
现在在 Canvas 可组合
Canvas {
invalidations.let{inv->
//Draw Composables
}
}
现在,每当您想使无效时:
invalidations++
这不是最好的方法,因为更改一个变量的状态只会导致可组合重绘,但以这种方式无效将重绘在 invalidations.let block 内绘制的任何内容!

关于android - Jetpack Compose 中的 Canvas 重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67024755/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com