我有一个自定义ViewGroup,它扩展了linearLayout,这个视图组有一个gridView作为子视图。我想如果mGridView点击mGridView.onClickListener调用并执行但在我的自定义视图组中处理其他触摸事件(如移动mGridView)(onTouchEvent()执行)。所以我在onInterceptTouchEvent:
@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()。
答案 0 :(得分:1)
click事件是一个复合事件,它不仅包含MotionEvent.ACTION_DOWN。
它应该有一个MotionEvent.ACTION_DOWN,可能还有其他几个MotionEvent.ACTION_MOVE,最后是一个MotionEvent.ACTION_UP,以及所有这些都在你点击的视图的范围内。
您应该在方法onInterceptTouchEvent(MotionEvent ev)中定义其他MotionEvent以“返回false”。 也许是这样的:
if( (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_DOWNaction == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_UP) && y > mGridView.getTop() )
来自this的公寓,您可能已阅读过,请查看Detecting Common Gestures
或者(但不是真的建议)尝试不在View上使用OnClickListener而是使用OnTouchListener。使用当前代码,您应该在那里收到MotionEvent.ACTION_DOWN,您现在返回false