Добавить ввод анимации, чтобы начать пункт назначения в компоненте навигации Android
Я знаю, как добавить анимацию входа и выхода в action
тег в навигационном графе. Я также знаю, как динамически добавлять анимацию, используя NavOptions
при навигации с navController
,
Я хочу знать, как мы можем добавить анимацию ввода для StartDestination
в навигационном графе. Я могу сделать это двумя способами:
- Применение анимации к корневому представлению начального пункта назначения
- Использование временного исходного фрагмента назначения, который будет заменен исходным конечным фрагментом.
- Применение анимации к контейнеру (
FrameLayout
) изNavHostFragment
и добавить фрагмент хоста динамически
Но я хотел бы знать, есть ли официальное решение для этой цели.
Спасибо
1 ответ
Там нет официального способа оживить startDestination
фрагмент, и я считаю, что вы вообще не должны оживлять это. Есть несколько способов вашего startDestination
появляется фрагмент, и у всех есть свои способы запуска анимации:
- Твой
NavHost
размещается в действии, и это действие запускается из панели запуска. Пусковые установки обычно отменяют переходы окна, чтобы ваша деятельность выглядела красиво. - Твой
NavHost
размещается в действии, и это действие запускается другим действием. Используйте переходы активности, чтобы переопределить переходы по умолчанию. - Твой
NavHost
вложен во фрагмент. Содержащий фрагмент выполняет свой собственный переход, когда появляется в поле зрения.
Как вы можете видеть, во всех случаях происходит другой переход, когда startDestination
фрагмент появляется или исчезает, поэтому переход фрагмента здесь, скорее всего, столкнется с существующим переходом, что сделает его неприятным.
В то же время, если вы действительно хотите оживить это, есть немало способов. В дополнение к упомянутому в вопросе, я могу думать об этом:
-
Если вы используете собственные фрагменты, установите переходы фрагментов по умолчанию в теме приложения с атрибутамиfragmentOpenEnterAnimation
,fragmentOpenExitAnimation
и так далее.Обновление: это не имеет смысла в контексте вопроса и не будет работать в любом случае. - Override
Fragment.onCreateAnimation
или жеFragment.onCreateAnimator
методы в вашем фрагменте и возвращать анимацию / аниматор.