如何聆听触摸次数?

时间:2020-06-25 07:26:22

标签: kotlin ontouchlistener multi-touch ontouch

我认为这很容易。一如既往

//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在每个手指松开时都会触发,但看起来最后一根手指只触发一次。
当用户松开一根手指而又继续移动另一根手指时,是否存在捕捉瞬间?

2 个答案:

答案 0 :(得分:0)

您可以使用两种方法getPointerCount(x) and/or getPointerId(x)

getPointerCount获取事件中包含的数据的指针数。总是> = 1。

虽然getPointerId()返回事件中与特定指针数据索引关联的指针标识符。标识符告诉您与数据关联的实际指针编号,说明自当前手势开始以来上下移动的各个指针。

因此,在您的情况下,如果要捕获未从屏幕上删除的指针,则可以使用getPointerCount来检查是否已删除指针,然后在最后一个指针时使用getPointerId分配某种功能已发布。

答案 1 :(得分:0)

初始语句不正确。实际上,android会通过事件MotionEvent.ACTION_UP/MotionEvent.ACTION_POINTER_UP

通知所有修饰