Детектор жестов возвращает только действие длительного нажатия - PullRequest
0 голосов
/ 04 мая 2019

Я хочу использовать детектор жестов для определения различий между одним нажатием, двойным нажатием и долгим нажатием, но независимо от того, что я пытаюсь, он возвращает результат при длительном нажатии

    val gestureDetector = GestureDetector(activity, object : GestureDetector.SimpleOnGestureListener() {
        override fun onDoubleTap(e: MotionEvent?): Boolean {
            Log.d("gestureResult","doube tap")

            return super.onDoubleTap(e)
        }

        override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
            Log.d("gestureResult","single tap")
            return super.onSingleTapConfirmed(e)
        }

        override fun onLongPress(e: MotionEvent?) {
            Log.d("gestureResult","long press")
            super.onLongPress(e)
        }
    })

    imageView.setOnTouchListener { v, event ->
        gestureDetector.onTouchEvent(event)
    }

Основываясь на предложении @pskink, я добавил журнал перед вызовом жеста, обнаруженного в onTouchEvent, распечатав в журнале событие. Это результат. Первый был для одного щелчка, второй - для двойного щелчка и напечатан дважды, третий - для длинного щелчка.

2019-05-04 16:10:35.634 9614-9614/co.getdere D/EventLog: event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=272.9829, y[0]=234.94873, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=162832092, downTime=162832092, deviceId=0, source=0x1002 }
2019-05-04 16:10:41.095 9614-9614/co.getdere D/EventLog: event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=353.96313, y[0]=206.9336, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=162837555, downTime=162837555, deviceId=0, source=0x1002 }
2019-05-04 16:10:41.301 9614-9614/co.getdere D/EventLog: event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=353.96313, y[0]=206.9336, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=162837759, downTime=162837759, deviceId=0, source=0x1002 }
2019-05-04 16:10:45.428 9614-9614/co.getdere D/EventLog: event MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=221.9624, y[0]=209.96582, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=162841885, downTime=162841885, deviceId=0, source=0x1002 }

1 Ответ

0 голосов
/ 05 мая 2019

На основе ответа @squonk на этот вопрос Значение возврата false из onDown () Я добавил

    override fun onDown(e: MotionEvent?): Boolean {
        return true
    }

И теперь он работает без проблем

...