【问题标题】:Support Fragment pop animation is not working支持 Fragment 弹出动画不起作用
【发布时间】:2018-09-29 21:01:30
【问题描述】:

我在我的应用程序中使用 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>

以上内容适用于进入动画(片段按预期从底部滑动)。但是从不播放流行动画。我什至尝试使用android内置的淡入淡出动画无济于事。任何有关解决此问题的帮助将不胜感激。

【问题讨论】:

  • 放更多关于pop的细节。你怎么叫pop?
  • 我没有从代码中调用 pop。我将片段添加到后台堆栈,当按下后退按钮时它会弹出

标签: android android-fragments android-animation


【解决方案1】:

老问题,但如果有人仍然像我一样遇到这个问题,你需要在添加动画片段时使用fragmentTransaction.add() 而不是fragmentTransaction.replace()

【讨论】:

    【解决方案2】:

    片段设置自定义动画方法为setCustomAnimations(int enter, int exit, int popEnter, int popExit)

    • enter:片段进入动画。
    • exit:fragment 退出动画,!注意如果你调用replace并且你有一个pre fragment,pre fragment会运行这个动画
    • popEnter:当fragment堆栈回到fragment时,它运行这个动画。
    • popExit: 当fragment out of fragment stack时,它运行这个。

    所以你应该这样称呼它:

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

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我注意到只有当片段容器视图(在您的情况下为 R.id.fragmentContainer)没有固定尺寸时才会发生这种情况,在我的情况下,它的高度是 wrap_content。将高度设置为固定值后,pop 动画效果非常好。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-13
          • 1970-01-01
          相关资源
          最近更新 更多