我有一个光标图标,我希望在用户拖动它时使其保持在用户手指的中心,但由于触摸倾斜和各种其他原因,它不能通过简单地通过拖动更新视图的偏移来保持居中onDrag 中的金额。
我以为我可以计算触摸点的全局 X Y 并将其设置为该值,但奇怪的是,如果不做一些令人沮丧的事情(例如使用pointerInterop 修饰符),就很难在 Compose 中获取该值。
onDrag = { change, dragAmount ->
change.consume()
params.x += dragAmount.x.toInt()
params.y += dragAmount.y.toInt()
wm.updateViewLayout(composeView, params)
}
问题并不完全清楚您在哪里设置阻力以及它与触摸倾斜的关系。如果您发布更多详细信息,这会很有帮助,但您可以通过
change: PointerInputChange
从 change.position
获取指针位置,返回光标或索引的偏移量。
将全球排名提高到 1.7 以上也很容易。您可以在 onGloballyPositioned/onPlaced 中使用
it.positionOnScreen()
获取它。
/**
* The position of this layout on the device's screen.
* Returns [Offset.Unspecified] if the conversion cannot be performed.
*/
fun LayoutCoordinates.positionOnScreen(): Offset = localToScreen(Offset.Zero)