使用Android接收onTouch和onClick事件

前端之家收集整理的这篇文章主要介绍了使用Android接收onTouch和onClick事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个视图需要处理onTouch手势和onClick事件.实现这个目标的正确方法是什么?

我在视图上设置了onTouchListener和onClickListener.每当我触摸视图时,首先触发onTouch事件,然后触发onClick.但是,从onTouch事件处理程序我必须返回true或false.返回true表示正在使用该事件,因此android事件系统不会再传播该事件.

因此,永远不会生成onClick事件,至少在我的onTouch事件处理程序中返回true时,我的onClick侦听器永远不会被触发.另一方面,返回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,float velocityX,float velocityY) {
        // do something
        return super.onFling(e1,velocityX,velocityY);
    }
}

猜你在找的Android相关文章