29

我尝试使用新的 android 兼容性包将片段包含到我的项目中。当我添加一个新片段时,我试图包含一个过渡动画。这只是我的动画作品之一。In 动画有效,但 Out 动画无效。我在某处读到它是兼容性包中的一个错误。但我还读到该错误已在兼容性包的第三版中得到修复。谁能帮我解决这个问题

在动画中

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

出动画

<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();
4

4 回答 4

23

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

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 是您的输入动画,而 R.anim.slide_down 是您的输出动画。setCustomAnimations 的第二对参数(3 和 4)允许您指定弹出回栈的弹出/弹出动画(例如,当用户按下返回时,片段将使用第四个参数指定的动画进行动画处理)。

于 2012-01-03T21:44:27.317 回答
8

我找到了解决方法。在您的片段类中覆盖 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);
}
于 2015-06-12T10:18:41.773 回答
1

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

  1. 我想在退出动画后做一些 UI 更改。但我发现退出动画不起作用。我的 UI 更改代码在 onBackPressed() 中。

我的解决方案如下:

  1. 在 onCreateAnimator() 中移动 UI 更改逻辑。然后退出动画作品。
于 2018-02-22T01:43:11.960 回答
0

使用以下示例:

 private fun gotoFragment(fragment:Fragment){
     parentFragmentManager.commit {
        setCustomAnimations(
             R.anim.slide_in,
           R.anim.fade_out,
              R.anim.fade_in,
             R.anim.slide_out
        )
         setReorderingAllowed(true)
        replace(R.id.fragment_dashboard_container, fragment)
        addToBackStack(null)
    }
}

这是文档片段交易

于 2021-10-08T06:43:16.783 回答