在Jetpack Compose中跟踪手指位置



在Jetpack Compose中,一旦用户将手指放在屏幕上并移动它,我希望收到手指位置的通知。

如何跟踪手指的运动?

其机制是可组合的修饰符pointerInput值。

Surface(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectDragGestures { change, dragAmount ->
positionX = change.position.x
positionY = change.position.y
Log.d("location", "${change.position}")
}
}){
......
}

pointerInput有各种各样的手势检测器,您可以指定它们只检测特定类型的手势,这非常有用。使用上面的代码,我可以允许用户在屏幕上拖动一个圆圈。

Modifier.pointerInput()提供了许多选项,如检测长按、双击或拖动手势的敲击手势,或检测缩放、旋转、质心变化或平移运动的变换手势。

然而,对于拖动手势,您无法检测到初始向下,因为它需要通过一个阈值才能启动onDragStart。

当第一个指针向下时,您需要签出awaitFirstDown(),然后对于move事件,循环中的awaitPointerEvent(),对于up活动,循环结束。

你可以在这里找到我关于手势的详细答案,以及如何使用手势构建一个基本的绘图应用程序。

另外,当您不想保留过时的值时,Modifier.pointerInput(keys的一个或多个参数对于重新启动闭包非常重要。

最新更新