【问题标题】:How can we animate a navigateUp() fragment transition?我们如何为 navigateUp() 片段过渡设置动画?
【发布时间】:2020-02-15 20:25:20
【问题描述】:

在执行属于 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() 之外,还有什么其他的解决方案可以通过动画返回到你来自的地方?

【问题讨论】:

    标签: android android-fragments navigation


    【解决方案1】:

    您可以像这样使用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)
    

    【讨论】:

    • 感谢以下选项给了我“推/弹出动画”效果: .setEnterAnim(R.anim.slide_in_right) .setPopEnterAnim(R.anim.slide_in_left) .setPopExitAnim(R.anim.slide_out_right)在导航选项上
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多