【问题标题】:How to add animation to changing fragments using Navigation Component?如何使用导航组件向变化的片段添加动画?
【发布时间】:2018-10-13 15:38:42
【问题描述】:

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

【问题讨论】:

    标签: android kotlin android-jetpack


    【解决方案1】:

    在导航组件文档 (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 不允许我们指定动画持续时间。我们所能做的就是在每个动画文件中设置持续时间。
    • 有没有办法用它做 Circular Reveal 过渡
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多