如何仅在触摸子视图区域时触发Child的触摸事件。在其他情况下,需要触发父母的触摸事件

时间:2014-08-06 04:36:02

标签: android touch

我有一个自定义相对布局来处理触摸事件以旋转此布局。自定义相对布局(父级)具有图像视图和框架布局,因为它是子级。框架布局又具有相对布局(不是自定义),而相对布局又具有多个图像按钮。在这种情况下,图像按钮可以被视为子项。

我为每个图像按钮都有onTouch监听器。我在自定义相对布局中重写了onInterceptTouchEvent以返回true,以便在旋转自定义父布局时不触发子触摸事件。但是,当我点击或触摸图像按钮时,不会触发图像按钮的触摸事件。如果我在父布局中从onInterceptTouchEvent返回false,则会触发子节点的onTouch侦听器并导致按钮旋转,这是我不想要的。

除了单击或触摸图像按钮的情况外,如何处理或发送父项的触摸事件到其自己的onTouchEvent,并且图像按钮触摸操作在不调用父项触摸事件的情况下生效?

1 个答案:

答案 0 :(得分:1)

您可以通过为孩子onTouchListener注册ImageButton来实现这一目标。然后,在侦听器内部,通过在父视图上调用requestDisallowInterceptTouchEvent来获取对父级的引用以阻止事件冒泡。类似于以下片段的内容...

imageButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent motionEvent) {
            v.getParent().requestDisallowInterceptTouchEvent(true);

            switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_UP:
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }
        }
    });

请注意,这需要在触摸事件的整个持续时间内发生,并且发送给父母的请求需要切换回来,以便它可以在ImageButton触摸事件后继续拦截触摸事件(s)已经完成处理......这可能是一个长按触摸事件,所以只要ImageButton检测到ACTION_UP动作事件,就应该将控制权交还给父母