Kotlin 如何收听触摸次数?

Kotlin 如何收听触摸次数?,kotlin,ontouchlistener,multi-touch,ontouch,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.actionMas

我觉得这很容易。一如既往

//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\u UP会在释放每个手指时启动。但看起来它在最后一个手指上只启动一次。
当用户松开一根手指,但不停地移动另一根手指时,有没有办法抓住这个瞬间?

您可以使用两种方法

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

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

因此,在您的情况下,如果要捕获未从屏幕上删除的指针,可以使用getPointerCount检查是否有指针被删除,然后在释放最后一个指针时使用getPointerId分配某种函数。

您可以使用两种方法

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

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


因此,在您的情况下,如果要捕获未从屏幕上删除的指针,可以使用getPointerCount检查是否有指针被删除,然后在释放最后一个指针时使用getPointerId分配某种函数。

初始语句不正确。实际上,android会用事件通知所有润色
MotionEvent.ACTION\u UP/MotionEvent.ACTION\u POINTER\u UP

初始语句不正确。实际上,android会用事件通知所有润色
MotionEvent.ACTION\u UP/MotionEvent.ACTION\u POINTER\u UP

我知道这些方法。我不想让用户用捏手势缩放图像,当其中一个手指离开触摸屏后,我们停止缩放并开始用一个手指拖动图像。要做到这一点,我需要知道用户何时释放一个手指,同时保持另一个手指在屏幕上。无论如何,我发现触碰事件实际上是用action type
MotionEvent触发的。action\u POINTER\u UP
我知道这些方法。我不想让用户用捏手势缩放图像,当其中一个手指离开触摸屏后,我们停止缩放并开始用一个手指拖动图像。要做到这一点,我需要知道用户何时释放一个手指,同时保持另一个手指在屏幕上。无论如何,我发现触碰事件实际上是以动作类型
MotionEvent.action\u POINTER\u UP触发的