支持片段弹出动画不起作用

时间:2015-07-28 06:35:29

标签: android android-fragments android-animation

我在我的应用中使用v4支持片段。我有一个活动,用户可以通过单击按钮查看更多信息。信息屏幕应从底部向上滑动,覆盖活动,按下背面时,向下滑动。这是我目前正在使用的代码

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                    ft.setCustomAnimations(
                             R.anim.fragment_bottom_enter, 
                             R.anim.fragment_bottom_exit,                                  
                             R.anim.fragment_bottom_exit, 
                             R.anim.fragment_bottom_exit
                    );                 
                    ft.replace(R.id.fragmentContainer, fragment, TAG);
                    ft.addToBackStack(null);
                    ft.commit();

fragment_bottom_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fillAfter="true"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromYDelta="100%p"
        android:toYDelta="0%p" />
</set>

fragment_bottom_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fillAfter="true"
        android:fromYDelta="0%p"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toYDelta="100%p" />
</set>

以上内容适用于输入动画(片段按预期从底部滑动)。但流行动画从未播放过。我甚至尝试使用内置淡入淡出功能的幻灯片并淡出动画效果无济于事。任何有关解决这个问题的帮助都将非常感激。

4 个答案:

答案 0 :(得分:1)

旧问题,但如果有人仍然像我一样遇到此问题,则在添加动画片段时需要使用fragmentTransaction.add()代替fragmentTransaction.replace()

答案 1 :(得分:1)

片段集自定义动画方法是setCustomAnimations(int enter, int exit, int popEnter, int popExit)

  • enter:片段输入动画。
  • exit:片段退出动画,!注意如果您调用replace并且您有预片段,则预片段将运行此动画
  • popEnter:当片段堆叠回片段时,它会运行此动画。
  • popExit:当碎片堆栈中的片段出现时,它会运行它。

所以你应该这样称呼它:

getSupportFragmentManager().beginTransaction()
    .setCustomAnimations(R.anim.slide_in_from_bottom, 0, 0, R.anim.slide_out_to_bottom)
    .replace(getFragmentId(), fragment, fragment.getClass().getSimpleName())
    .addToBackStack(fragment.getClass().getSimpleName())
    .commit();
希望它有所帮助。

答案 2 :(得分:1)

我遇到了同样的问题,我注意到只有在片段容器视图(在您的情况下为R.id.fragmentContainer)没有固定尺寸的情况下才会发生这种情况,在我的情况下其高度为wrap_content。将高度设置为固定值后,弹出动画就像一个吊饰一样起作用。

答案 3 :(得分:0)

在您的片段活动中,您需要覆盖onBackpress方法并调用如下

 @Override
  public void onBackPressed() {
    super.onBackPressed();
    getSupportFragmentManager().popBackStack();
}

然后你的片段可以从后面的堆栈弹出。