[英]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.