FragmentTransation setCustomAnimations不起作用

我试图使用新的Android兼容性包,包括片段到我的项目。 我正在尝试添加一个新的片段时包含一个过渡animation。 事情只是我的animation作品之一。 Inanimation有效,但Outanimation不起作用。 我在某处读到这是兼容包中的一个错误。 但是我也读了这个bug在兼容包的第三个版本中得到修复。 任何人都可以帮助我解决这个问题

在animation中

<translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/anticipate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="100%" android:toYDelta="0%" android:duration="1000"/> 

animation

 <translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="0" android:zAdjustment="top" android:fromYDelta="0%" android:toYDelta="100%" android:duration="1000"/> 

这是我用来添加片段的代码

 newFragment = new HelloWorldFragment(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.bottom_top_animation, R.anim.top_bottom_animation); ft.add(R.id.outer_layout, newFragment); ft.addToBackStack(null); ft.commit(); 

Solutions Collecting From Web of "FragmentTransation setCustomAnimations不起作用"

这在当前版本的库中是有效的,但是之前它肯定被破坏了。 你可以使用这样的东西:

 final FragmentManager fm = getSupportFragmentManager(); final FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down) .add(R.id.fragment_container, new SomeFragment(), FRAGMENT_TAG) .addToBackStack(FRAGMENT_TAG) .commit(); 

R.anim.slide_up是你的animation,R.anim.slide_down是你的animation。 setCustomAnimations的第二对参数(3和4)允许你指定popup/popupanimation来popup背层(例如,当用户按下后,片段将animation指定为第四个参数的animation)。

我find了一个解决方法。 在片段类中覆盖onCreateAnimation(int transit,boolean enter,int nextAnim),然后工作正常。

 @Override public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { return enter ? AnimationUtils.loadAnimation(getActivity(), R.anim.grow_fade_in_center) : AnimationUtils.loadAnimation(getActivity(), R.anim.shrink_fade_out_center); }