Android如何检测双击?

时间:2015-08-16 17:58:09

标签: javascript android double-click gesturedetector

我试图在android中的Canvas上刷新DoubleTap。我在自定义GestureDetector中使用View

final GestureDetector mDetector = new GestureDetector(
    getContext(), new GestureDetector.OnGestureListener() {

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        invalidate();
        return true;
    }
}

但我收到了错误

  

new的类型onDoubleTap(MotionEvent)   GestureDetector.OnGestureListener(){}必须覆盖或实现   超类型方法

Remove '@Override' annotation

溶液。我删除了覆盖并获得此警告

  

来自new类型的onDoubleTap(MotionEvent)方法   GestureDetector.OnGestureListener(){}从不在本地使用。

然后我尝试测试这是否有效,并且每当我TextView时都会更改DoubleTap字符串。没有任何事情发生。

我还查看了GestureDetector Reference的解释,但他们甚至没有DoubleTap那里,每个人都使用。我该怎么办?

3 个答案:

答案 0 :(得分:0)

试试这个

final GestureDetector mDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent e) {

        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {

        return true;
    }
});

答案 1 :(得分:0)

对于那些想知道如何将其设置为相应视图的人:

final GestureDetector gDetector = new GestureDetector(getBaseContext(), new GestureDetector.SimpleOnGestureListener() {

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        doIt();
        return true;
    }
});

// Set it to the view
mButton.setOnTouchListener((v, event) -> gDetector.onTouchEvent(event));

答案 2 :(得分:0)

我解决这个问题的方法不同,因为我还需要为 onClick 侦听器执行一些操作,而且它在列表视图中,所以我需要知道项目内容是什么。 这是我使用 kotlin Job 的方法: 在课程的顶部,我声明了这样的内容:

private var doubleTapTimerJob: Job = Job()
private var clickedViewItem: CartViewItem? = null
val DOUBLE_TAP_DELAY = 200L

其中 CartViewItem 是列表中使用的模型。 这是我的 onClickListener 逻辑:

if (clickedViewItem == null || clickedViewItem != cartViewItem) {
    doubleTapTimerJob.cancel()
    doubleTapTimerJob = lifecycleScope.launch {
        delay(DOUBLE_TAP_DELAY)
        clickedViewItem = null
    }
    clickedViewItem = cartViewItem
    onClicked(cartViewItem)
} else {
    onDoubleClicked(cartViewItem)
    clickedViewItem = null
    doubleTapTimerJob.cancel()
}

这里我等待第二次点击 200 毫秒,如果没有发生,我会让 clickedViewItem 为 null,所以它不再有效