Android 导航组件:PopEnterAnim 不工作
Android Navigation Component: PopEnterAnim not working
在片段中导航时,除 popenteranim 外,所有动画都正常工作,它根本不工作,并且没有明显的原因。例如,LoginFragment 到 Register1AccountFragment(都在同一个activity):
导航图:
<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。我这样做只是为了将寄存器片段与导航的其余部分分开,应用程序中只有一个activity。
登录片段
registerButton.setOnClickListener(v -> {
view.clearFocus();
NavDirections action = LoginFragmentDirections.actionLoginFragmentToRegister1AccountFragment();
Navigation.findNavController(v).navigate(action);
});
anim/slide_in_from_left
<?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 = fade from 0 alpha to 1 alpha.
我也试过使用动作的 ID 导航,而不是 NavDirections,它仍然不显示动画;
登录片段
registerButton.setOnClickListener(v -> {
view.clearFocus();
Navigation.findNavController(v).navigate(R.id.action_loginFragment_to_register1AccountFragment);
});
显然 androidx.fragment:fragment-ktx:1.3.2 中存在错误,导致某些动画停止工作
如果您有该依赖项 将其更改为版本 1.3.1。
该错误已报告并将在版本 1.3.3
中修复
我在 Kotlin 中面临完全相同的问题。
所有动画都有效,但只有 PopEnterAnim 无效。
我的动画文件完全正确。我的导航依赖项是:
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
我没有依赖性androidx.fragment:fragment-ktx
我正在使用 Safe Args 访问导航操作。没有问题。
在片段中导航时,除 popenteranim 外,所有动画都正常工作,它根本不工作,并且没有明显的原因。例如,LoginFragment 到 Register1AccountFragment(都在同一个activity):
导航图:
<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。我这样做只是为了将寄存器片段与导航的其余部分分开,应用程序中只有一个activity。
登录片段
registerButton.setOnClickListener(v -> {
view.clearFocus();
NavDirections action = LoginFragmentDirections.actionLoginFragmentToRegister1AccountFragment();
Navigation.findNavController(v).navigate(action);
});
anim/slide_in_from_left
<?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 = fade from 0 alpha to 1 alpha.
我也试过使用动作的 ID 导航,而不是 NavDirections,它仍然不显示动画;
登录片段
registerButton.setOnClickListener(v -> {
view.clearFocus();
Navigation.findNavController(v).navigate(R.id.action_loginFragment_to_register1AccountFragment);
});
显然 androidx.fragment:fragment-ktx:1.3.2 中存在错误,导致某些动画停止工作 如果您有该依赖项 将其更改为版本 1.3.1。 该错误已报告并将在版本 1.3.3
中修复我在 Kotlin 中面临完全相同的问题。
所有动画都有效,但只有 PopEnterAnim 无效。
我的动画文件完全正确。我的导航依赖项是:
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
我没有依赖性androidx.fragment:fragment-ktx
我正在使用 Safe Args 访问导航操作。没有问题。