繁体   English   中英

Android 滑动手势不适用于子视图

[英]Android swipe gesture not working for child views

我有一个布局,其中包含一些可点击的视图。 我已经按照这个实现了滑动手势。 如果您在空白区域中滑动,这很有效,但如果您开始在布局内的其中一个视图中滑动,则它不起作用。

如何避免这种情况? 将 onSwipeListener 添加到活动中的单个视图似乎很疯狂。 有没有更好的办法?

我对这个问题的工作解决方案是在带有孩子的视图上方使用一个不可见层,如下所示:

  <RelativeLayout
        android:id="@+id/contentLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/linearLayout"
        android:layout_alignStart="@+id/linearLayout"
        android:layout_alignParentTop="true"> 
        ... 
  </RelativeLayout>

  <View
        android:id="@+id/gesture_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/linearLayout"
        android:layout_alignStart="@+id/linearLayout"
        android:layout_alignParentTop="true"
        android:focusable="true"
        android:focusableInTouchMode="true" />

其中contentLayout包含多个子项,包括一些按钮。

第二步是在这个gesture_view上捕获触摸事件并将它们代理到contentLayout和我的GestureDetector 代码(类似于您在问题中链接的代码),如下所示:

gesture_view.setOnTouchListener { _, event ->
    contentLayout.dispatchTouchEvent(event)
    gestureListener.onTouch(event)
    true
}

请注意,您需要注意如何将事件传递给gesture_view后面的视图。 简单的contentLayout#onTouch行不通的。 它必须是contentLayout.dispatchTouchEvent

在您的子视图中设置android:clickable=false 这将防止他们拦截来自父级的触摸事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM