Как стать автором
Обновить

Комментарии 5

А что будет с кнопкой при попытке смахнуть BottomSheet вниз плавным движением?
Будет ли момент, когда она будет перекрывать верхнюю часть BottomSheet?

Получится вот такое поведение

Гифка с поведением

Верхняя граница layout с кнопкой совпадает с нижней границей bottomsheet. Получается, что содержимое bottomsheet визуально заезжает под кнопку, но на самом деле оно исчезает в моменте соприкосновения с кнопкой.
Это легче понять, представив, что в данном кейсе верхняя часть кнопки - это низ экрана, если бы кнопки не было.

Можно анимировать плавное исчезание кнопки при отрицательном slideOffset в методе onSlide, смещая layout с кнопкой и coordinator вниз по мере уменьшения отрицательного slideOffset.

if (slideOffset > 0) {
    // Тут весь код, который уже был                        
} else {
	// Коэффицент можно подобрать любой по желанию
  // А так же нужно предусмотреть случай, когда тянули вниз, 
  //но начали возвращать наверх, но slideOffset ещё отрицательный. Для этого можно сравнивать прошлый и текущий slideOffset 
  //и делать соответствующее решение
	buttons.y += slideOffset.absoluteValue * 3
	coordinator?.let {
  	  it.y += slideOffset.absoluteValue * 3
	}
}

И тогда получится вот такое поведение при смахивании вниз.

Кнопка уезжает при вытягивании вниз


Надеюсь, что я полностью ответил на вопрос)

Мы используем похожее решение, только смещение кнопки рассчитываем сами через top у bottom sheet view.
Также важно помнить про повороты экрана и анимацию показа bottom sheet – важно распознавать такие случаи, чтобы ничего не прыгало.


Демо
Кнопка же всегда там, как я понял? Зачем ее динамически создавать? В любом случае всегда можно просто убрать ее (gone). ИМХО динамическое создание вьюшек не очень хорошо.

И зачем в button.xml корневой LinearLayout? В нем же одна кнопка, почему нельзя просто кнопку добавлять? Ну в крайнем случае использовать?

Зачем ее динамически создавать?

Я как раз таки искал способ добавить кнопку на экран но так, чтобы она не двигалась вместе с остальным содержимым bottomsheet при вытягивании.
Если подскажете куда добавить её в разметку фрагмента, чтобы она оставалась неподвижной без изменений её y(игрик) при onSlide(), я буду рад)
Я пытался, но не нашёл способа.

И зачем в button.xml корневой LinearLayout?

Просто для примера, что там может быть не одна View, а ViewGroup.
Указывал этот аспект в статье:

  • Вместо кнопки мы можем начинить наш layout любыми другими view

Этот туториал могут ведь увидеть и новички. На мой взгляд полезно дать понять, что можно делать шире, чем в примере.

В нем же одна кнопка, почему нельзя просто кнопку добавлять?

Можно :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации