Java 在视图组及其所有子视图上检测SwipeGesture

Java 在视图组及其所有子视图上检测SwipeGesture,java,android,Java,Android,我有一个RelativeLayout,它包含许多具有各种触摸事件的子视图。我希望在用户在父视图的任何位置滑动时得到通知,这样我就可以更新一些UI,同时仍然让子视图处理自己的触摸/拖动事件。Android实现这一点的标准方法是什么 我在想,我可以在所有视图上放置一个覆盖,让它检测滑动手势,如果不是滑动,我可以将触摸事件传递到层次结构中的其他视图。Android似乎不支持这种触摸检测,一旦一个视图决定查看某个事件是否是某个手势,其他视图将无法看到该事件 滑动手势由三个触摸事件组成:动作向下、动作移动

我有一个
RelativeLayout
,它包含许多具有各种触摸事件的子视图。我希望在用户在父视图的任何位置滑动时得到通知,这样我就可以更新一些UI,同时仍然让子视图处理自己的触摸/拖动事件。Android实现这一点的标准方法是什么

我在想,我可以在所有视图上放置一个覆盖,让它检测滑动手势,如果不是滑动,我可以将触摸事件传递到层次结构中的其他视图。Android似乎不支持这种触摸检测,一旦一个视图决定查看某个事件是否是某个手势,其他视图将无法看到该事件

滑动手势由三个触摸事件组成:动作向下、动作移动和动作向上。您需要记录所有三个事件,然后查看是否是刷卡。如果不是刷卡,那么我们需要将这些事件传递给其他子视图,以查看它是否符合他们正在寻找的手势的标准。如果是刷卡,我们希望阻止事件发送到子视图。只是不确定这是否真的可能

更新

利用答案部分中用户的想法,我能够编写符合我规范的布局。此
RelativeLayout
仅处理左右滑动,但可以添加到以处理更多方向
OnSwipedListener
只是一个
接口
,有两种方法
void swipedLeft()
void swipedRight()


当触摸事件发生时,它首先传递给父布局视图,然后通过返回true或false的
onInterceptTouchEvent
传递给子视图。您希望覆盖并截获父
RelativeLayout
上的触摸事件,并确定是否看到了刷卡手势。如果您看到了一次刷卡,您希望返回您已经处理过的结果。在这种情况下,
ACTION\u UP
是可能的滑动的结束,如果您的
onTouchEvent
处理了事件,那么您可以返回true,它下面的视图将不会获得完成事件,因此忽略它们的手势

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean handled = onTouchEvent(event);
    if (event.getAction() == MotionEvent.ACTION_UP) return handled;
    return false;
}

当触摸事件发生时,它首先传递给父布局视图,然后通过返回true或false的
onInterceptTouchEvent
传递给子视图。您希望覆盖并截获父
RelativeLayout
上的触摸事件,并确定是否看到了刷卡手势。如果您看到了一次刷卡,您希望返回您已经处理过的结果。在这种情况下,
ACTION\u UP
是可能的滑动的结束,如果您的
onTouchEvent
处理了事件,那么您可以返回true,它下面的视图将不会获得完成事件,因此忽略它们的手势

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    boolean handled = onTouchEvent(event);
    if (event.getAction() == MotionEvent.ACTION_UP) return handled;
    return false;
}

我将在哪里实现这一点?在
RelativeLayout
的子类中?这是处理该场景的最佳实践还是仅仅是一个黑客行为?是的,这是,另外,当执行swype手势并且relativelayout使用它时,返回true和setInterceptTouchEvent(true),因此最后一个事件不会发送给Child我在哪里实现它?在
RelativeLayout
的子类中?这是处理此场景的最佳实践还是仅仅是一个黑客行为?是的,这是,另外,当执行swype手势并且relativelayout使用它时,返回true和setInterceptTouchEvent(true),这样最后一个事件就不会发送给child