Добавить ввод анимации, чтобы начать пункт назначения в компоненте навигации Android

Я знаю, как добавить анимацию входа и выхода в action тег в навигационном графе. Я также знаю, как динамически добавлять анимацию, используя NavOptions при навигации с navController,

Я хочу знать, как мы можем добавить анимацию ввода для StartDestination в навигационном графе. Я могу сделать это двумя способами:

  1. Применение анимации к корневому представлению начального пункта назначения
  2. Использование временного исходного фрагмента назначения, который будет заменен исходным конечным фрагментом.
  3. Применение анимации к контейнеру (FrameLayout) из NavHostFragment и добавить фрагмент хоста динамически

Но я хотел бы знать, есть ли официальное решение для этой цели.

Спасибо

1 ответ

Решение

Там нет официального способа оживить startDestination фрагмент, и я считаю, что вы вообще не должны оживлять это. Есть несколько способов вашего startDestination появляется фрагмент, и у всех есть свои способы запуска анимации:

  1. Твой NavHost размещается в действии, и это действие запускается из панели запуска. Пусковые установки обычно отменяют переходы окна, чтобы ваша деятельность выглядела красиво.
  2. Твой NavHost размещается в действии, и это действие запускается другим действием. Используйте переходы активности, чтобы переопределить переходы по умолчанию.
  3. Твой NavHost вложен во фрагмент. Содержащий фрагмент выполняет свой собственный переход, когда появляется в поле зрения.

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

В то же время, если вы действительно хотите оживить это, есть немало способов. В дополнение к упомянутому в вопросе, я могу думать об этом:

  1. Если вы используете собственные фрагменты, установите переходы фрагментов по умолчанию в теме приложения с атрибутами fragmentOpenEnterAnimation , fragmentOpenExitAnimation и так далее. Обновление: это не имеет смысла в контексте вопроса и не будет работать в любом случае.
  2. Override Fragment.onCreateAnimation или же Fragment.onCreateAnimator методы в вашем фрагменте и возвращать анимацию / аниматор.