Android 在父视图中处理触摸,但在子视图中处理单击事件

Android 在父视图中处理触摸,但在子视图中处理单击事件,android,touch,android-custom-view,Android,Touch,Android Custom View,我有一个扩展linearLayout的自定义视图组,该视图组的子视图为gridView。我想知道mGridView是否单击了mGridView.onClickListener,是否调用并执行了它,但在我的自定义视图组(onTouchEvent()已执行)中处理了其他触摸事件(如move mGridView)。所以我在InterceptTouchEvent上确认: @Override public boolean onInterceptTouchEvent(MotionEvent ev) {

我有一个扩展linearLayout的自定义视图组,该视图组的子视图为gridView。我想知道mGridView是否单击了mGridView.onClickListener,是否调用并执行了它,但在我的自定义视图组(onTouchEvent()已执行)中处理了其他触摸事件(如move mGridView)。所以我在InterceptTouchEvent上确认:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

    int action = ev.getAction();
    int y = (int) ev.getY();

    if( action == MotionEvent.ACTION_DOWN && y > mGridView.getTop() )  //y > mGridView,getTop() checks if position of touch in mGridView Position or not.
       return false;

    return true;

}

但从未调用过mGridView.OnClickListener()

单击事件是一个复合事件,它不仅仅由MotionEvent.ACTION\u DOWN组成

它应该有一个MotionEvent.ACTION\u向下,可能还有其他几个MotionEvent.ACTION\u移动,最后是一个MotionEvent.ACTION\u向上,所有这些都在单击视图的范围内

您应该在onInterceptTouchEvent(MotionEvent ev)方法中定义其他MotionEvents以“return false”。 可能是这样的:

if( (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) && y > mGridView.getTop() )
您可能已经阅读过的Appart,请查看


或者(但不是真的建议)尝试在视图上不使用OnClickListener,而是使用OnTouchListener。使用当前代码,您应该会在那里收到MotionEvent.ACTION\u DOWN您现在返回false

谢谢。动作==MotionEvent.action\u DOWNaction==MotionEvent.action\u MOVE的正确性是什么?要检测到单击,将几个动作组合在一起,首先是动作\u DOWN,然后是视图边界内的任何动作,除了动作\u CANCEL,然后是动作\u UP。我认为,如果你让动作上升而动作下降,你的点击就会被检测到,onclick监听器就会工作