要在导航组件中的目标之间创建动画,可以在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),它建议某些屏幕(例如登录屏幕)应独立于导航流程进行处理。
<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中指定动画。
答案 0 :(得分:0)
如果您有一个需要多个目的地访问的操作(您可能希望navigate_to_profile_fragment
操作可以使用),那么这正是global actions的用例-在{ {1}}图形级别,而不是仅与单个目标相关联。这意味着图形中的任何目标都可以通过<navigation>
navigate(R.id.navigate_to_profile_fragment)