如何在使用导航组件更改片段时添加动画?

12
如何为使用导航架构组件更改片段添加动画?

据文件所述,如果您仅仅阅读它的话。https://developer.android.com/guide/navigation/navigation-animate-transitions - StackOverflower
2个回答

24
在导航组件文档(https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing)的创建目标之间的转换部分(在文档末尾附近)详细介绍了如何创建转换。您可以通过选择所需转换的箭头,然后在Attributes选项卡的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>

您可以使用常规动画资源进行此动画


嗯,但似乎NavOption不允许我们指定动画持续时间。我们所能做的就是在每个anim文件中设置持续时间。 - Harvey
有没有办法使用它来进行圆形揭示转场? - Mohamed Ibrahim

14

如果您想通过编程方式添加动画,请使用NavOptions(此处)

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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接