将输入动画添加到android导航组件中的开始目的地

将输入动画添加到android导航组件中的开始目的地,android,android-jetpack,android-navigation,android-jetpack-navigation,android-navigation-graph,Android,Android Jetpack,Android Navigation,Android Jetpack Navigation,Android Navigation Graph,我知道如何在导航图的action标记中添加进入和退出动画。我还知道如何在使用navController导航时使用NavOptions动态添加动画 我想知道如何在导航图中为StartDestination添加enter动画。我可以用两种方法来做: 将动画应用于“开始-目标”的根视图 使用将被原始目标片段替换的临时开始目标片段 将动画应用于NavHostFragment的容器(FrameLayout),并动态添加主机片段 但我想知道是否有任何官方的解决方案 谢谢没有官方的方法来制作startDest

我知道如何在导航图的
action
标记中添加进入和退出动画。我还知道如何在使用
navController
导航时使用
NavOptions
动态添加动画

我想知道如何在导航图中为
StartDestination
添加enter动画。我可以用两种方法来做:

  • 将动画应用于“开始-目标”的根视图
  • 使用将被原始目标片段替换的临时开始目标片段
  • 将动画应用于
    NavHostFragment
    的容器(
    FrameLayout
    ),并动态添加主机片段
  • 但我想知道是否有任何官方的解决方案


    谢谢

    没有官方的方法来制作
    startDestination
    片段的动画,我相信你一般不应该制作它的动画。您的
    startDestination
    片段有几种进入视图的方式,它们都有自己的方式来运行动画:

  • 您的
    NavHost
    由活动托管,此活动从启动器启动。启动程序通常会覆盖窗口转换,以使您的活动看起来很好
  • 您的
    NavHost
    由一个活动托管,而此活动由另一个活动启动。用于覆盖默认值
  • 您的
    NavHost
    嵌套在片段中。包含的片段在进入视图时运行自己的转换
  • 正如您所看到的,当
    startDestination
    片段出现或消失时,在所有情况下都会涉及另一个转换,因此这里的片段转换可能会与现有转换发生冲突,使其看起来不愉快

    同时,如果你真的想制作动画,有很多方法。除了问题中提到的以外,我还可以考虑以下几点:

  • 如果您使用的是本机片段,请使用属性
    fragmentOpenInterAnimation
    fragmentOpenExitAnimation
    等在应用程序主题中设置默认片段转换。更新:这在问题的上下文中没有意义,而且无论如何也不会起作用
  • 重写片段中的
    Fragment.onCreateAnimation
    Fragment.onCreateAnimator
    方法,并返回所需的动画/动画

  • 谢谢你的描述。我有一个特定的场景,所以我必须禁用默认的活动动画。但是,我根据自己的要求,使用
    NavController
    设置了
    BottomNavigationBar
    ,它似乎在第一次显示开始目的地以及在顶层之间切换时使用了淡入淡出动画。这很有趣,我认为
    BottomNavigationBar
    不会以任何方式更改默认行为,因此,在这种情况下,
    startDestination
    也不应设置动画。但是,在目的地之间切换时,它确实使用淡入淡出动画。