android - 在父 View 中处理触摸但在 subview 中处理单击事件

标签 android touch android-custom-view

我有一个扩展 linearLayout 的自定义 ViewGroup,这个 View 组有一个 gridView 作为 subview 。我想如果 mGridView 单击 mGridView.onClickListener 调用并执行但在我的自定义 View 组(onTouchEvent() 执行)中处理其他触摸事件(如移动 mGridView)。所以我 ovveride 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() 从未调用过。

最佳答案

点击事件是一个复合事件,它不仅仅包含一个 MotionEvent.ACTION_DOWN。

它应该有一个 MotionEvent.ACTION_DOWN,可能还有几个其他的 MotionEvent.ACTION_MOVE,最后是一个 MotionEvent.ACTION_UP,所有这些都在您点击的 View 的范围内。

您应该在方法 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。使用您当前的代码,您应该在那里收到您现在返回 false 的 MotionEvent.ACTION_DOWN

关于android - 在父 View 中处理触摸但在 subview 中处理单击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282255/

相关文章:

android - 如何自定义 AlertDialog.Builder 中单选按钮的样式?

android - 从底部滑动 View

android - 在长按时启用 EditText(或按钮)

java - 如何将媒体从服务器发送到 android 应用程序?

javascript - 如何捕获触摸设备的屏幕键盘 'keydown' 和 'keyup' 事件

ios - 如何在另一个 View 上从右向左移动一个 View

android - 关闭 RecyclerView 子尺寸变化动画

android - NavUtils.getParentActivityIntent() 抛出 "Activity does not have a parent activity name specified."

java - 第一次尝试从 adb 启动完成后无法正常工作

javascript - 简单的点击事件可以在 Ubuntu 的触摸屏设备上使用