我有一个自定义相对布局来处理触摸事件以旋转此布局。自定义相对布局(父级)具有图像视图和框架布局,因为它是子级。框架布局又具有相对布局(不是自定义),而相对布局又具有多个图像按钮。在这种情况下,图像按钮可以被视为子项。
我为每个图像按钮都有onTouch监听器。我在自定义相对布局中重写了onInterceptTouchEvent以返回true,以便在旋转自定义父布局时不触发子触摸事件。但是,当我点击或触摸图像按钮时,不会触发图像按钮的触摸事件。如果我在父布局中从onInterceptTouchEvent返回false,则会触发子节点的onTouch侦听器并导致按钮旋转,这是我不想要的。
除了单击或触摸图像按钮的情况外,如何处理或发送父项的触摸事件到其自己的onTouchEvent,并且图像按钮触摸操作在不调用父项触摸事件的情况下生效?
答案 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
动作事件,就应该将控制权交还给父母