如何使用导航组件向不断变化的片段添加动画?

时间:2018-10-13 15:38:42

标签: android kotlin android-jetpack

如何使用导航架构组件向不断变化的片段添加动画?

2 个答案:

答案 0 :(得分:4)

在导航组件文档(https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing)的以下部分中:在目标之间创建转换(位于文档末尾),您已对其进行了详细说明。

您可以使用编辑器添加它们,方法是选择所需过渡的箭头,然后在属性选项卡的 Animations 部分中选择动画。

或者通过引用xml文件中的动画,如示例所示:

<fragment
    android:id="@+id/specifyAmountFragment"
    android:name="com.example.buybuddy.buybuddy.SpecifyAmountFragment"
    android:label="fragment_specify_amount"
    tools:layout="@layout/fragment_specify_amount">
    <action
        android:id="@+id/confirmationAction"
        app:destination="@id/confirmationFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
 </fragment>

您可以将常规动画资源用于此动画

答案 1 :(得分:1)

如果要通过编程方式添加动画,请使用 NavOptions this later

NavOptions.Builder navBuilder =  new NavOptions.Builder();
navBuilder.setEnterAnim(R.anim.slide_left).setExitAnim(R.anim.slide_right).setPopEnterAnim(R.anim.slide_left).setPopExitAnim(R.anim.slide_right);

//Inside Activity
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
navController.navigate(R.id.destinationFragmentId,null,navBuilder.build());
//Inside Fragment
NavHostFragment.findNavController(YoutFragment.this)
                            .navigate(R.id.destinationFragmentId, null, navBuilder.build());