我创建了一个
当子组合被拖动或缩放时,我需要知道它相对于其父组合(
如何获取子级
Canvas
组合,可以让我在父组合(Canvas
)的范围内拖动和缩放子组合。当子组合被拖动或缩放时,我需要知道它相对于其父组合(
Canvas
)的位置。GridCanvas(
ratio = canvasRatio,
) { gridWidth, gridHeight ->
var scale by remember { mutableStateOf(1f) }
var offsetX by remember { mutableStateOf(0f) }
var offsetY by remember { mutableStateOf(0f) }
RenderedImage(
modifier = Modifier
.pointerInput(Unit) {
detectTransformGestures { _, pan, zoom, _ ->
val futureScale = scale * zoom
if (futureScale in MIN_SCALE_FACTOR..MAX_SCALE_FACTOR) {
scale = futureScale
}
offsetX += pan.x
offsetY += pan.y
}
}
.graphicsLayer {
this.scaleX = scale
this.scaleY = scale
this.translationX = offsetX
this.translationY = offsetY
},
imageUri = someUri,
)
}
如何获取子级
RenderedImage
相对于其父级的X
和Y
位置?
onGloballyPositioned
只会被调用一次。不过,我已经更新了我的问题以使其更加清晰! :) - TareK KhouryonGloballyPositioned
会在您的组合件进入组合时被多次调用,但我明白了您的意思,并更新了我的答案。如果您想要触摸位置,可以使用onGesture: (centroid: Offset, pan: Offset, zoom: Float, rotation: Float) -> Unit
的第一个参数。如果您只有单个指针按下,则此函数返回该指针的位置;当您有多个指针时,它将返回触摸中心。但是,组合件中的触摸系统从0开始,这就是为什么我问您是否需要父级位置的原因。在左上角,使用一个指针,您将得到0,0作为偏移量。 - ThracianpointerInput(Unit)
并从中获取触摸位置,同时使用detectTransformgestures
进行缩放、旋转或平移。您可以拥有多个Modifier.pointerInput(Unit)
,每个都具有不同的角色,并且一个没有不会影响其他,这取决于您如何消耗pointerInputChange
。 - Thracian