我有這個可組合的,它應該允許使用指向畫布的指標進行繪制,但是當我移動指標時什么也沒有發生
@ExperimentalComposeUiApi
@Composable
fun CanvasDraw() {
val path = remember { Path() }
Canvas(modifier = Modifier
.fillMaxSize()
.pointerInteropFilter {
when (it.action) {
MotionEvent.ACTION_DOWN -> {
path.moveTo(it.x, it.y)
}
MotionEvent.ACTION_MOVE -> {
path.lineTo(it.x, it.y)
}
else -> false
}
true
}) {
drawPath(
path = path,
color = Color.Blue,
style = Stroke(10f)
)
}
}
uj5u.com熱心網友回復:
remember { Path() }正在為下一次重組快取 lambda 內容值,但當此物件上的內容發生更改時,它無法觸發重組。要創建一些狀態,這將觸發 Compose 中更改的重新組合,您需要使用某種可變狀態 - 這是為 Compose 制作的新事物。
您可以在檔案中的 Compose 中找到有關狀態的更多資訊,包括解釋基本原理的這個 youtube 視頻。
里面的存盤點Path不會干凈,因為它不是基本型別。相反,我使用的是可變狀態點串列,如下所示:
val points = remember { mutableStateListOf<Offset>() }
Canvas(modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectDragGestures { change, _ ->
points.add(change.position)
}
}
) {
drawPath(
path = Path().apply {
points.forEachIndexed { i, point ->
if (i == 0) {
moveTo(point.x, point.y)
} else {
lineTo(point.x, point.y)
}
}
},
color = Color.Blue,
style = Stroke(10f)
)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/368397.html
標籤:科特林 android-jetpack-compose
下一篇:webpack不捆綁節點模塊
