Android Jetpack组件-Navigation跳转动画

577 阅读1分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

组件简介

导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。

官方资源链接

官方文档:Introducing Navigation Component
官方教程:Jetpack 导航
Google官方实验室Demo: android-navigation

背景

由于项目起初订的框架为整个APP以Fragment为主, 如果通过FragmentManager进行管理,这种方式很容易造成代码臃肿,难以维护。正好接触到了Navigation就大胆的尝了一次鲜,由于Fragment默认为系统跳转动画, 有些时候不太符合产品需求, 故进行了跳转动画设置

使用

查找资料得到官方跳转动画指定 代码修改如下

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation">
    <fragment
        android:id="@+id/fragment_forget_email"
        android:name="com.ihealthlabs.covidtest.ui.user.ForgetEmailFragment"
        tools:layout="@layout/fragment_forget_email">
        <action
            android:id="@+id/action_fragment_forget_email_to_forget_phone"
            app:destination="@id/fragment_forget_phone"
            app:enterAnim="@anim/slide_in_top"
            app:exitAnim="@anim/slide_out_bottom" />
    </fragment>

    <fragment
        android:id="@+id/fragment_forget_phone"
        android:name="com.ihealthlabs.covidtest.ui.user.ForgetPhoneFragment"
        tools:layout="@layout/fragment_forget_phone">
        <action
            android:id="@+id/action_fragment_forget_phone_to_forget_email"
            app:destination="@id/fragment_forget_phone"
            app:enterAnim="@anim/slide_in_bottom"
            app:exitAnim="@android:anim/fade_out"/>
    </fragment>
</navigation>

在页面中调用如下方法即可跳转,返回也是如此

findNavController().navigate(R.id.action_fragment_forget_email_to_forget_phone)

按照上面的方法进行挑战是没问题, 但是返回的时候就会重新创建fragment, 经过查证, 此方法内部调用的是replace方法, 如果不想返回重新创建fragment, 改为调用findNavController().popBackStack()即可, 如果需要弹出动画, 对应设置app:popEnterAnimapp:popExitAnim即可