gpt4 book ai didi

android - 如何在同一个 Android Compose View 中使用多个手势?

转载 作者:行者123 更新时间:2023-12-03 08:04:07 26 4
gpt4 key购买 nike

我想在同一 View 中使用拖动和点击手势。

 Canvas(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTapGestures(
onDoubleTap = {
Log.i("Double Tap","Clicked")
}
)

detectDragGestures { change, dragAmount ->
change.consumeAllChanges()
dragAmountX = dragAmount.x
dragAmountY = dragAmount.y
}
}
)

我尝试了这种方法,但只有点击手势有效。如何在 View 中同时使用点击和拖动手势?

最佳答案

您需要按照答案 here 链接它们.

Modifier
.pointerInput(keys){

}
.pointerInput(keys){


}

从 1.2.0-beta01 开始,change.consumeAllChanges() 已被弃用,它是 change.consume()。 Consumer() 的作用是防止连续手势(例如拖动、变换或滚动)接收事件,因为上面的所有手势都会在循环事件之前检查 change.isConsumed true

val context = LocalContext.current

val modifier = Modifier
.pointerInput(Unit) {
detectTapGestures(
onPress = {
Toast
.makeText(context, "onPress", Toast.LENGTH_SHORT)
.show()
},
onTap = {
Toast
.makeText(context, "onTap", Toast.LENGTH_SHORT)
.show()
}
)
}

.pointerInput(Unit) {
detectDragGestures(
onDragStart = {
Toast
.makeText(context, "onDragStart", Toast.LENGTH_SHORT)
.show()
},
onDrag = { change, dragAmount ->
println("DRAGGING $dragAmount")

}
)
}

让我在链接中添加旁注作为答案。 detectGestures 在调用 onDrag() 回调后立即调用 change.consume()。因此,除非您在 onDrag() 内进行一些条件事件检查,调用 consume.change() 是没有用的。当消耗 PointerInputChange 时,PointerInputChange.positionChange() 返回 Offset.Zero 和 PointerInputChange.isConsumed true。

private fun PointerInputChange.positionChangeInternal(ignoreConsumed: Boolean = false): Offset {
val previousPosition = previousPosition
val currentPosition = position

val offset = currentPosition - previousPosition

return if (!ignoreConsumed && isConsumed) Offset.Zero else offset
}

关于android - 如何在同一个 Android Compose View 中使用多个手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72972390/

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