如何听触摸次数?
How to listen the number of touches?
我认为这很容易。一如既往
//somewhere inside constructor
overlay.addOnTouchListener(this)
//...
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
event?:return false
if (event.actionMasked == MotionEvent.ACTION_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_DOWN) {
//start drag
moving=true
} else if (event.actionMasked == MotionEvent.ACTION_MOVE) {
if (!moving) return true
//do drag
} else if (event.actionMasked == MotionEvent.ACTION_UP) {
//stop drag
println("touch:up(${event.pointerCount})")
}
return true
}
我原以为 MotionEvent.ACTION_UP 会在每次释放时启动 finger.But 看起来它只为最后一个手指启动一次。
有没有办法捕捉用户松开一根手指但继续移动另一根手指的瞬间?
您可以使用两种方法getPointerCount(x) and/or getPointerId(x)。
getPointerCount 获取事件中包含的数据的指针数。这总是 >= 1.
While getPointerId() returns 与事件中特定指针数据索引关联的指针标识符。标识符告诉您与数据关联的实际指针编号,说明自当前手势开始以来上下移动的各个指针。
所以在你的情况下,如果你想捕获没有从屏幕上移除的指针,你可以使用 getPointerCount 检查是否有指针被移除,然后使用 getPointerId 分配某种功能当最后一个指针已被释放。
最初的说法是错误的。实际上 android 通过事件 MotionEvent.ACTION_UP/MotionEvent.ACTION_POINTER_UP
通知所有修饰
我认为这很容易。一如既往
//somewhere inside constructor
overlay.addOnTouchListener(this)
//...
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
event?:return false
if (event.actionMasked == MotionEvent.ACTION_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_DOWN) {
//start drag
moving=true
} else if (event.actionMasked == MotionEvent.ACTION_MOVE) {
if (!moving) return true
//do drag
} else if (event.actionMasked == MotionEvent.ACTION_UP) {
//stop drag
println("touch:up(${event.pointerCount})")
}
return true
}
我原以为 MotionEvent.ACTION_UP 会在每次释放时启动 finger.But 看起来它只为最后一个手指启动一次。
有没有办法捕捉用户松开一根手指但继续移动另一根手指的瞬间?
您可以使用两种方法getPointerCount(x) and/or getPointerId(x)。
getPointerCount 获取事件中包含的数据的指针数。这总是 >= 1.
While getPointerId() returns 与事件中特定指针数据索引关联的指针标识符。标识符告诉您与数据关联的实际指针编号,说明自当前手势开始以来上下移动的各个指针。
所以在你的情况下,如果你想捕获没有从屏幕上移除的指针,你可以使用 getPointerCount 检查是否有指针被移除,然后使用 getPointerId 分配某种功能当最后一个指针已被释放。
最初的说法是错误的。实际上 android 通过事件 MotionEvent.ACTION_UP/MotionEvent.ACTION_POINTER_UP