Страницы

Поиск по вопросам

четверг, 5 марта 2020 г.

Как правильно реализовать морфинг Hamburger'а в back button?

#android #архитектура


Я хочу использовать подход: "каждому фрагменту свой Toolbar".
Как в этом случае правильно реализовывать анимацию морфинга
Hamburger -> BackButton
при переходах между фрагментами?
    


Ответы

Ответ 1



У вас получается такая ситуация: Toolbar принадлежит фрагменту, а иконка внутри Toolbar отображает состояние стека фрагментов внутри активити. Если вам действительно нужна эта анимация перехода от гамбургера к стрелке, то есть два варианта: 1) Делаете глобальный Toolbar в активити. Но тогда будут все вытекающие кейсы с инфлейтом разных меню и заголовков из конкретных фрагментов. 2) Делаете в активити метод, который синхронизирует переданный Toolbar с состоянием стека. Но надо не забывать отсоединять Toolbar, когда фрагмент уходит с экрана (логично использовать методы старт/стоп) fun attachToolbarNavigationIcon(toolbar: Toolbar) {} fun dettachToolbarNavigationIcon() {} ЗЫ: Есть более простой вариант. Скорее всего анимация из "гамбургера" в кнопку "назад" вам нужна только при переходе с первого фрагмента на следующий. В остальных случаях там висит только кнопка "назад". Поэтому можно это обработать только в рамках первого фрагмента и все: перед переходом вперед - превращаем в кнопку назад и только тогда переходим. При возврате превращаем обратно в гамбургер.

Ответ 2



Не могу дать Вам готового решения, но в общем случае в support library есть готовый класс DrawerArrowDrawable, который как раз реализует эту морфирущую иконку. Вы всегда можете попробовать добавить её на Ваш Toolbar и запустить анимацию после того, как тулбар нового фрагмента добавится на экран. Пример запуска анимации вот тут. Если Вы используете Navigation Drawer, то иконка должна работать "из коробки". Вот здесь есть схожий вопрос с ответами, как при этом использовать разные тулбары (обратите внимание не только на принятый ответ, но и на ответ с большинством голосов).

Комментариев нет:

Отправить комментарий