Fragment横向滑动动画问题:仅进入生效,返回无动画效果
Fragment返回时无滑入/滑出动画的解决方案
你遇到的问题并非调用getActivity().onBackPressed()导致的,核心原因是setCustomAnimations()的参数设置不完整——你仅指定了进入新Fragment和移除旧Fragment的动画,但返回栈时,还需要额外配置当前Fragment退出和前一个Fragment重新显示的动画。
修改后的代码示例
使用setCustomAnimations()的四参数重载方法,明确返回过程的动画逻辑:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // 四个参数依次为:新Fragment进入动画、旧Fragment移除动画、返回时当前Fragment退出动画、返回时前一个Fragment显示动画 transaction.setCustomAnimations( R.anim.slide_in_right, // EditFragment从右侧滑入 R.anim.slide_out_left, // 原Fragment向左侧滑出(可根据需求调整) R.anim.slide_in_left, // 返回时原Fragment从左侧滑入 R.anim.slide_out_right // 返回时EditFragment向右侧滑出 ); EditFragment edit = EditFragment.newInstance(); transaction.replace(android.R.id.content, edit, "editFragment"); transaction.addToBackStack("editFragment"); transaction.commit();
补充对应的动画文件
你需要新增以下两个动画XML文件,放在res/anim/目录下:
slide_in_left.xml(原Fragment返回时的滑入动画):
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="-100%" android:toXDelta="0%" /> </set>
slide_out_right.xml(EditFragment返回时的滑出动画):
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="0%" android:toXDelta="100%" /> </set>
额外说明
调用getActivity().onBackPressed()是触发Fragment返回栈的正确方式,它会触发FragmentManager弹出栈顶事务,并执行你配置的返回动画。
内容的提问来源于stack exchange,提问作者Duddie
相关产品推荐
相关产品推荐

