Android жест жеста не работает для дочерних просмотров - PullRequest
0 голосов
/ 05 января 2019

У меня есть макет с несколькими интерактивными видами. Я реализовал жест смахивания согласно этому . Это прекрасно работает, если вы проводите в пустой области, но не работает, если вы начинаете проводить внутри одного из представлений внутри макета.

Как этого можно избежать? Добавление onSwipeListener к какому-либо отдельному представлению в действии кажется безумным. Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

мое рабочее решение этой проблемы - использование невидимого слоя над видом с дочерними элементами следующим образом:

  <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 и передача их на linearLayout и мой код GestureDetector (аналогичный тому, который вы указали в вопросе) следующим образом:

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

Обратите внимание, вы должны быть осторожны с тем, как вы доставляете события в представление за gesture_view. Просто contentLayout#onTouch не будет работать. Это должно быть contentLayout.dispatchTouchEvent

0 голосов
/ 05 января 2019

Установите android:clickable=false в ваших дочерних представлениях. Это предотвратит перехват событий касания от родителя.

...