Разрешить BottomSheet скользить вверх после достижения порога в области за пределами - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь повторить поведение текущей Карты Google, позволяющее раскрыть нижний лист при скольжении вверх от нижней панели.Обратите внимание, что в записи ниже я сначала нажимаю на одну из кнопок на нижней панели, а затем сдвигаюсь вверх, что в свою очередь показывает лист позади него.

enter image description here

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

Как мне добиться этого поведенияне прибегая к библиотекам?Или есть какие-либо официальные представления Google / Android, которые допускают такое поведение между двумя разделами (панель навигации и нижний лист)?

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Класс Bottom sheet уже сделает это за вас. Просто установите высоту его просмотра равным 0, и он уже должен прослушивать жест сдвига.

Однако, я не уверен, что он будет работать с высотой просмотра 0. Поэтому, если это не сработает, просто установите высоту просмотра 20dp и сделайте верхнюю часть макета нижнего листа прозрачной, чтобы это не виден.

Это должно сработать для тебя, если я не пойму твой вопрос. Если ваша цель состоит в том, чтобы просто иметь возможность постукивать внизу и скользить вверх, поднимая нижний лист, который должен быть довольно прямым.

Единственная возможная проблема, с которой вы могли бы столкнуться, - это если нижний лист не получает сенсорные события из-за кнопки, уже потребляющей его. Если это произойдет, вам нужно будет создать сенсорный обработчик для всего экрана и вернуть «true», что вы обрабатываете его каждый раз, а затем просто перенаправить сенсорные события в базовый вид, так что, когда вы превысите порог своей нижней вкладки На панели вы начинаете отправлять сенсорные события на макет нижнего листа вместо панели вкладок.

Звучит сложнее, чем есть. У большинства классов есть onTouch, и вы просто отправляете его дальше. Однако идите по этому пути, только если он не работает для вас из коробки, как я описал в первых двух сценариях.

Наконец, еще один вариант, который может сработать, - это создать кнопки вкладок как часть bottomSheetLayout и сделать высоту просмотра равной панели вкладок. Затем убедитесь, что панель вкладок ограничена нижним родительским листом, так что, когда вы проводите вверх, она просто остается внизу. Это позволит вам нажимать на кнопки или получить поведение свободного нижнего листа.

Счастливого кодирования!

0 голосов
/ 20 марта 2019

Вы можете попробовать что-то вроде этого (это псевдокод, надеюсь, вы понимаете, к чему я клоню):

<FrameLayout id="+id/bottomSheet">

    <View id="exploreNearby bottomMargin="buttonContainerHeight/>
    <LinearLayout>
        <Button id="explore"/>
        <Button id="explore"/>
        <Button id="explore"/>
    </LinearLayout>

    <View width="match" height="match" id="+id/touchCatcher"

</FrameLayout>

Добавить детектор жестов в представлении bottomSheet для переопределения onTouch ().который использует SimpleOnGestureListener для ожидания событий «прокрутки» - все, кроме события прокрутки, которое вы можете повторить до представления в обычном режиме.

На событии прокрутки вы можете вырастить свой exploreNearby в качестве дельты (убедитесь, что он не повторяется, не переходит на высокий или низкий уровень).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...