在片段中导航时,除了popenteranim之外,所有动画都能正常工作,这根本不起作用,原因也不明显。例如,LoginFragment到Register1AccountFragment(都在同一个活动中(:
导航图:
<action
android:id="@+id/action_loginFragment_to_register1AccountFragment"
app:destination="@id/nav_register"
app:enterAnim="@anim/slide_in_from_right"
app:exitAnim="@anim/slide_out_to_left"
app:popEnterAnim="@anim/slide_in_from_left"
app:popExitAnim="@anim/slide_out_to_right" />
请注意,目的地是一个新的导航图,其中startDestination是register1AccountFragment。我这样做只是为了从导航的其余部分中分离寄存器片段,并且应用程序中只有一个活动。
登录碎片
registerButton.setOnClickListener(v -> {
view.clearFocus();
NavDirections action = LoginFragmentDirections.actionLoginFragmentToRegister1AccountFragment();
Navigation.findNavController(v).navigate(action);
});
动画/幻灯片_从左进入
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="300" />
因此,所有其他动画都可以工作,包括popExitAnim,它与slide_in_from_left正好相反,即
anim/slide_out_to_right
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="300" />
这在所有碎片上都是一样的,无论它们的popEnterAnim如何。我也尝试过多种不同的动画,比如popEnterAnim=从0 alpha渐变为1 alpha。
我还尝试过使用动作的ID进行导航,而不是NavDirections,它仍然不会显示动画;
登录碎片
registerButton.setOnClickListener(v -> {
view.clearFocus();
Navigation.findNavController(v).navigate(R.id.action_loginFragment_to_register1AccountFragment);
});
显然在androidx.fragment:frage-ktx:11.3.2中有一个错误,导致一些动画停止工作如果您有该依赖项,请将其更改为1.3.1版本。该错误已报告,并将在1.3.3版中修复
我在Kotlin面临着完全相同的问题。
所有动画都有效,但只有PopEnterAnim无效
我的动漫文件是完全正确的。我的导航依赖项是:
实现‘androidx.navigation:导航片段ktx:2.3.5’
实现'androidx.navigation:navigation-ui-ktx:2.3.5'
我没有依赖项androidx.fragment:fragment ktx
我正在使用安全Args来访问导航操作。没有问题。