Android 碎片事务设置自定义动画不工作

Android 碎片事务设置自定义动画不工作,android,android-fragments,android-support-library,Android,Android Fragments,Android Support Library,我正在尝试使用新的android兼容包将片段包含到我的项目中。 我试图在添加新片段时包含过渡动画。这只是我的动画作品之一。In动画工作,但Out动画不工作。 我在某个地方读到它是兼容包中的一个bug。但我也读到,这个bug在兼容性软件包的第三版中得到了修复。有人能帮我解决这个问题吗 动画中 <translate xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@andr

我正在尝试使用新的android兼容包将片段包含到我的项目中。 我试图在添加新片段时包含过渡动画。这只是我的动画作品之一。In动画工作,但Out动画不工作。 我在某个地方读到它是兼容包中的一个bug。但我也读到,这个bug在兼容性软件包的第三版中得到了修复。有人能帮我解决这个问题吗

动画中

<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"/>

这在当前版本的库中是有效的,但之前它肯定被破坏了。您可以使用以下内容:

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\u up是您的in动画,R.anim.slide\u down是您的out动画。setCustomAnimations的第二对参数(3和4)允许您指定弹出backbackback的弹出/弹出动画(例如,当用户按back时,片段将以指定为第四个参数的动画进行动画制作)。

我找到了解决方法。在片段类中重写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);
}

我也面临同样的问题,以下是我的情况:

  • 我想在退出动画后做一些UI更改。但我发现退出动画不起作用。我的UI更改代码位于onBackPressed()中
  • 我的解决办法如下:

  • 在onCreateAnimator()中移动UI更改逻辑。然后退出动画作品
    在第三版中没有关于解决动画问题的信息:我暂时有点放弃了片段,因为我觉得它不够成熟,无法在大型项目中实现;s回复我未知动画师姓名:翻译。。。错误…知道我是否遗漏了什么吗?幻灯片动画似乎不适合我。相反,片段只是被删除并消失,没有幻灯片动画。@MAGx2您可以将setCustomAnimations与getSupportFragmentManager()一起使用。但是,在API 11之后,必须使用ObjectAnimators(通常存储在R.animator中),而不是translate animators。请注意,在当前版本的支持库(21.0.2)中,不能使用“setCustomAnimations”。这是一个已知问题:。对于'com.android.support:support-v4:21.0.3':动画正在工作,但在添加/替换之前调用setCustomAnimations很重要。您的意思是'onCreateAnimator'?方法名称与上述代码段中提到的相同,其片段方法只是覆盖此。退出动画对我仍然不起作用。第一个片段被替换,然后它的进入动画被播放,但退出动画不会为之前的片段播放,并且nextAnim参数始终为0!
    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();
    
    @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);
    }