FragmentTransation setCustomAnimations无效

ble*_*enm 26 android android-fragments android-support-library

我尝试使用新的android兼容包将片段包含到我的项目中.我在添加新片段时尝试包含过渡动画.这件事只是我的动画作品之一.In动画可以工作,但Out动画不起作用.我在某处读到这是兼容包中的一个错误.但我也读到该错误已在兼容包的第3版中修复.任何人都可以帮我解决这个问题

在动画中

<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"/>
Run Code Online (Sandbox Code Playgroud)

出动画

<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"/>
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

Ian*_*ton 19

这适用于当前版本的库,但它之前肯定已被破坏.你可以使用这样的东西:

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();
Run Code Online (Sandbox Code Playgroud)

其中R.anim.slide_up是你的动画,而R.anim.slide_down是你的动画.setCustomAnimations的第二对参数(3和4)允许您指定弹出/缩小动画以弹出背斜(例如,当用户按下时,片段将使用指定为第四个参数的动画进行动画处理).

  • 对于'com.android.support:support-v4:21.0.3':动画正在运行,但在添加/替换之前调用setCustomAnimations很重要. (11认同)
  • 它响应了我未知的动画师名称:翻译...错误...任何想法,如果我在这里遗漏任何东西? (7认同)
  • slide_down动画似乎对我不起作用.相反,片段会被删除并消失,没有幻灯片动画. (6认同)
  • 请注意,在当前版本的支持库(21.0.2)中,您不能使用"setCustomAnimations".这是一个众所周知的问题:http://code.google.com/p/android/issues/detail?id = 76770. (2认同)

Moh*_*hit 7

我找到了解决方法.在片段类中覆盖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);
}
Run Code Online (Sandbox Code Playgroud)