手势检测器仅返回长按动作

时间:2019-05-04 03:41:10

标签: android onclicklistener gesture double-click gesturedetector

我想使用手势检测器在单击,双击和长按之间进行去污,但是无论我尝试哪种操作,它都能在长按下返回结果

    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 :(得分:0)

基于@squonk对此问题The meaning of returning false from onDown()的回答 我添加了

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

现在它可以正常工作了