我有一个布局,其中有一些可点击的视图。我已经按照这个实现了滑动手势。如果你在空白区域滑动,这很有用,但如果你开始在布局中的一个视图内滑动,这就不起作用了。
如何避免这种情况?将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
和我的GestureDemector代码(类似于您在问题上链接的代码),如下所示:
gesture_view.setOnTouchListener { _, event ->
contentLayout.dispatchTouchEvent(event)
gestureListener.onTouch(event)
true
}
请注意,您需要注意如何将事件传递给< code>gesture_view后面的视图。简单的< code > content layout # on touch 是不行的。它必须是< code > content layout . dispatchtouchevent
在子视图中设置 android:clickable=false
。这将防止它们拦截来自父级的触摸事件。