我们如何为 navigateUp() 片段转换设置动画?

How can we animate a navigateUp() fragment transition?

在执行属于 androidx.navigation 系统的片段事务时,我们可以像这样以编程方式指定 NavOptions:

val navOptions = NavOptions.Builder()
        .setEnterAnim(R.anim.slide_in_right)
        .build()
    findNavController(R.id.nav_host_fragment).navigate(R.id.settingsFragment, null, navOptions)

我们也可以像这样在 navigation.xml 中指定它们:

 <fragment
        android:id="@+id/settingsFragment"
        android:name="com.test.android.fragments.SettingsFragment"
        android:label="SettingsFragment">

        <action
            android:id="@+id/action_settings_to_profile"
            app:destination="@id/userProfileSettingsFragment"
            app:enterAnim="@anim/slide_in_right" />

</fragment>

但是我们如何为 navigateUp() 方法设置动画呢?它不接受 NavOptions。我从右边滑动我的片段,但是当用户按下返回时,没有动画发生。我想做一个向右滑动的动画(与他们到达那里时看到的相反)。

如何设置动画:navigateUp()?它在内部调用 popBackStackInternal,这是一个复杂的操作。我没有看到任何与动画有关的逻辑。

除了 navigateUp() 之外,还有什么替代解决方案可以让您通过动画返回到原处?

您可以像这样使用 popEnterAnimpopExitAnim 属性:

 <fragment
    android:id="@+id/settingsFragment"
    android:name="com.storefaces.android.fragments.SettingsFragment"
    android:label="SettingsFragment">

    <action
        android:id="@+id/action_settings_to_profile"
        app:destination="@id/userProfileSettingsFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_right"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_left" />

</fragment>

或者,您可以在 NavOptions.Builder

上调用 setPopEnterAnim()setPopExitAnim() 方法
val navOptions = NavOptions.Builder()
    .setEnterAnim(R.anim.slide_in_right)
    .setExitAnim(R.anim.slide_out_right)
    .setPopEnterAnim(R.anim.slide_in_left)
    .setPopExitAnim(R.anim.slide_out_left)
    .build()

findNavController(R.id.nav_host_fragment).navigate(R.id.settingsFragment, null, navOptions)