如何听触摸次数?

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

通知所有修饰