Вариант A: использовать API перехода.
Просто установите анимацию непосредственно в действия nav_graph:
Код: Выделить всё
Код: Выделить всё
enterTransitionКод: Выделить всё
// Fragment's OnViewCreated
returnTransition = Slide(Gravity.END)
Он предоставляет методы прогнозирования обратного хода, где вы можете анимировать вручную (пример кода).
Что, если я хочу реализовать прогнозирующий возврат для фрагментов, но воспроизводить разные анимации перехода в зависимости от того, где начался жест назад (по крайней мере, сторона экрана)?
Вариант B предоставляет нам handleOnBackStarted с параметром BackEventCompat, который может предоставить нам сторону жеста с помощью метода getSwipeEdge, и метод handleOnBackProgressed для анимации. Но есть ограничение (упомянутое в документации): "пользователи не могут видеть предыдущий фрагмент при пролистывании назад" - т. е. отсутствие поиска. Таким образом, практически нет смысла использовать эту опцию для реализации предиктивного возврата - при продвижении анимации пользователь будет видеть пустой экран вместо предыдущего фрагмента.
Вариант A работает хорошо, поддерживается поиск, но при таком подходе нет способа определить сторону и начальные координаты жеста.
Объединение параметров также не работает, поскольку добавление OnBackPressedCallback управляет поиском из API перехода к обратному вызову, и определенная анимация перехода просто воспроизводится после handleOnBackPressed.
Некоторые другие варианты, о которых я думал:
- создать собственный FragmentNavigator, чтобы использовать добавление и скрытие FragmentTransaction, а затем иметь возможность использовать предыдущее представление фрагмента для поиска внутри ОнБаккпресседколлбэк. Похоже, что сохранение всех предыдущих фрагментов в памяти требует накладных расходов.
- каким-то образом передать представление текущего фрагмента следующему фрагменту и использовать его внутри OnBackPressedCallback для поиска. Также может быть неэффективно использование памяти.
- вызовите вручную предыдущий фрагмент OnCreateView, чтобы получить представление для поиска внутри OnBackPressedCallback. Создание двойного представления, несогласованность представлений, проблемы с памятью и т. д.
- обнаружение жеста возврата с помощью невидимых представлений по бокам экрана – обнаружение произойдет после запуска функции прогнозирования.
Подробнее здесь: https://stackoverflow.com/questions/798 ... tomization
Мобильная версия