我有一个需要处理这些手势和点击事件的视图。实现这一目标的正确方法是什么?
我在视图上设置了onTouchListeneronClickListener。每当我触摸视图时,首先触发onTouch事件,然后触发onClick。但是,从onTouch事件处理程序中,我必须返回truefalse。返回true意味着事件正在被消费,因此android事件系统将不再传播事件。
因此,永远不会生成onClick事件,当我在onClick事件处理程序中返回true时,至少不会触发我的onTouch侦听器。另一方面,返回false没有选项,因为这会阻止onTouch侦听器接收识别手势所需的任何其他事件。通常的解决方法是什么?

最佳答案

在GestureDetector中,可以直接调用callonClick()。
注意view.callonclick API需要API级别15。
试试看。

 // Create a Gesturedetector
GestureDetector mGestureDetector = new GestureDetector(context, new MyGestureDetector());

// Add a OnTouchListener into view
m_myViewer.setOnTouchListener(new OnTouchListener()
{

    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        return mGestureDetector.onTouchEvent(event);
    }
});

private class MyGestureDetector extends GestureDetector.SimpleOnGestureListener
{
    public boolean onSingleTapUp(MotionEvent e) {
        // ---Call it directly---
        callOnClick();
        return false;
    }

    public void onLongPress(MotionEvent e) {
    }

    public boolean onDoubleTap(MotionEvent e) {
        return false;
    }

    public boolean onDoubleTapEvent(MotionEvent e) {
        return false;
    }

    public boolean onSingleTapConfirmed(MotionEvent e) {
        return false;

    }

    public void onShowPress(MotionEvent e) {
        LogUtil.d(TAG, "onShowPress");
    }

    public boolean onDown(MotionEvent e) {
        // Must return true to get matching events for this down event.
        return true;
    }

    public boolean onScroll(MotionEvent e1, MotionEvent e2, final float distanceX, float distanceY) {
        return super.onScroll(e1, e2, distanceX, distanceY);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        // do something
        return super.onFling(e1, e2, velocityX, velocityY);
    }
}

08-17 23:27
查看更多