Android Множественное нажатие onTouchEvent event.actionMasked

override fun onTouchEvent(event: MotionEvent): Boolean {

        val touchX = event.x
        val touchY = event.y

        val id = event.getPointerId(event.actionIndex)

        when(event.actionMasked){
            MotionEvent.ACTION_DOWN -> {
                Log.d("MotionEvent", "ACTION_DOWN id=$id x=$touchX y=$touchY")
            }
            MotionEvent.ACTION_POINTER_DOWN -> {
                val pointerCount = event.pointerCount
                for (i in 0 until pointerCount) {
                    val multiTouchX = event.getX(i)
                    val multiTouchY = event.getY(i)

                    Log.d("MotionEvent", "ACTION_POINTER_DOWN i=$i x=$multiTouchX y=$multiTouchY")
                }
            }
            MotionEvent.ACTION_MOVE -> {
                val pointerCount = event.pointerCount
                for (i in 0 until pointerCount) {
                    val multiTouchX = event.getX(i)
                    val multiTouchY = event.getY(i)

                    Log.d("MotionEvent", "ACTION_MOVE i=$i x=$multiTouchX y=$multiTouchY")
                }
            }
            MotionEvent.ACTION_POINTER_UP -> {
                val pointerCount = event.pointerCount
                for (i in 0 until pointerCount) {
                    val multiTouchX = event.getX(i)
                    val multiTouchY = event.getY(i)

                    Log.d("MotionEvent", "ACTION_POINTER_UP i=$i x=$multiTouchX y=$multiTouchY")
                }
            }
            MotionEvent.ACTION_UP -> {
                Log.d("MotionEvent", "ACTION_UP id=$id x=$touchX y=$touchY")
            }
            MotionEvent.ACTION_CANCEL -> {
                Log.d("MotionEvent", "ACTION_CANCEL id=$id x=$touchX y=$touchY")
            }
        }

        return true //super.onTouchEvent(event)
    }

Пытаюсь понять, когда я ставлю на экран 1 палец то срабатывает ACTION_DOWN, все ок Когда убираю то ACTION_UP, тоже понятно

когда ставлю больше одного то ACTION_POINTER_DOWN, тоже все ок. но вот убрав один из N, я получаю ACTION_POINTER_UP где все касания что были, ну пока что тоже логично, но появляется некая несуразица..

Если после отрыва одного пальца из трех, я получаю отрыв всех пальцев, а в ACTION_MOVE продолжают логировать два оставшихся, не имея ACTION_POINTER_DOWN...

Иными словами, как мне понять какой палец оторвался, а какой остался на экране?


Ответы (0 шт):