如何在条件导航中为片段动画制作动画

时间:2020-09-05 05:34:00

标签: android android-fragments android-animation android-architecture-navigation

要在导航组件中的目标之间创建动画,可以在action标签中指定以下属性,如下所示。

<fragment
    .........>
    <action
        ........
        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>

我了解了条件导航(https://developer.android.com/guide/navigation/navigation-conditional),它建议某些屏幕(例如登录屏幕)应独立于导航流程进行处理。

enter image description here

<navigation
        .........
        app:startDestination="@id/main_fragment">
    <fragment
            android:id="@+id/main_fragment"
            android:name="com.google.android.conditionalnav.MainFragment"
            android:label="fragment_main"
            tools:layout="@layout/fragment_main">
        <action
                android:id="@+id/navigate_to_profile_fragment"
                app:destination="@id/profile_fragment"/>
    </fragment>
    <fragment
            android:id="@+id/login_fragment"
            android:name="com.google.android.conditionalnav.LoginFragment"
            android:label="login_fragment"
            tools:layout="@layout/login_fragment"/>
    <fragment
            android:id="@+id/profile_fragment"
            android:name="com.google.android.conditionalnav.ProfileFragment"
            android:label="fragment_profile"
            tools:layout="@layout/fragment_profile"/>
</navigation>

当用户尚未通过动画进行身份验证时,我想从ProfileFragment重定向到LoginFragment。我知道我们可以在进入或退出片段时在LoginFragment上显式定义过渡。

 class LoginFragment : Fragment() {
     override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          val inflater = TransitionInflater.from(requireContext())
          enterTransition = inflater.inflateTransition(R.transition.slide_right)
          exitTransition = inflater.inflateTransition(R.transition.fade)
     }
  }

class ProfileFragment : Fragment() {
      .......
      navController.navigate(R.id.login_fragment)
      .......
}

我想知道是否还有其他方法可以像使用动作标签上的动画那样,通过导航组件或动画属性从ProfileFragment动画化为LoginFragment动画,并在LoginFragment中指定动画。

1 个答案:

答案 0 :(得分:0)

如果您有一个需要多个目的地访问的操作(您可能希望navigate_to_profile_fragment操作可以使用),那么这正是global actions的用例-在{ {1}}图形级别,而不是仅与单个目标相关联。这意味着图形中的任何目标都可以通过<navigation>

触发操作
navigate(R.id.navigate_to_profile_fragment)