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