簡體   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