Фрагменты, настройка прогнозируемой задней анимации.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Фрагменты, настройка прогнозируемой задней анимации.

Сообщение Anonymous »

Чтобы реализовать функцию Predictive Back в приложении, использующем фрагменты и компонент навигации, есть 2 варианта:
Вариант A: использовать API перехода.
Просто установите анимацию непосредственно в действия nav_graph: Или назначьте экземпляры перехода (например, Fade или Slide) в свойствах перехода фрагмента (

Код: Выделить всё

enterTransition
, exitTransition и т. д.):

Код: Выделить всё

// Fragment's OnViewCreated

returnTransition = Slide(Gravity.END)
Вариант B: используйте OnBackPressedCallback.
Он предоставляет методы прогнозирования обратного хода, где вы можете анимировать вручную (пример кода).
Что, если я хочу реализовать прогнозирующий возврат для фрагментов, но воспроизводить разные анимации перехода в зависимости от того, где начался жест назад (по крайней мере, сторона экрана)?
Вариант B предоставляет нам handleOnBackStarted с параметром BackEventCompat, который может предоставить нам сторону жеста с помощью метода getSwipeEdge, и метод handleOnBackProgressed для анимации. Но есть ограничение (упомянутое в документации): "пользователи не могут видеть предыдущий фрагмент при пролистывании назад" - т. е. отсутствие поиска. Таким образом, практически нет смысла использовать эту опцию для реализации предиктивного возврата - при продвижении анимации пользователь будет видеть пустой экран вместо предыдущего фрагмента.
Вариант A работает хорошо, поддерживается поиск, но при таком подходе нет способа определить сторону и начальные координаты жеста.
Объединение параметров также не работает, поскольку добавление OnBackPressedCallback управляет поиском из API перехода к обратному вызову, и определенная анимация перехода просто воспроизводится после handleOnBackPressed.
Некоторые другие варианты, о которых я думал:
  • создать собственный FragmentNavigator, чтобы использовать добавление и скрытие FragmentTransaction, а затем иметь возможность использовать предыдущее представление фрагмента для поиска внутри ОнБаккпресседколлбэк. Похоже, что сохранение всех предыдущих фрагментов в памяти требует накладных расходов.
  • каким-то образом передать представление текущего фрагмента следующему фрагменту и использовать его внутри OnBackPressedCallback для поиска. Также может быть неэффективно использование памяти.
  • вызовите вручную предыдущий фрагмент OnCreateView, чтобы получить представление для поиска внутри OnBackPressedCallback. Создание двойного представления, несогласованность представлений, проблемы с памятью и т. д.
  • обнаружение жеста возврата с помощью невидимых представлений по бокам экрана – обнаружение произойдет после запуска функции прогнозирования.
Итак, я что-то упустил или это действительно невозможно сделать с фрагментами?

Подробнее здесь: https://stackoverflow.com/questions/798 ... tomization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»