【问题标题】:How to apply a fade-in/fade-out animation when replacing a fragment替换片段时如何应用淡入/淡出动画
【发布时间】:2014-05-02 05:57:23
【问题描述】:

我正在用另一个片段替换一个片段。我希望第一个片段以淡出效果消失,第二个片段以淡入效果出现。这是怎么做到的?

【问题讨论】:

  • 你知道如何制作动画吗?
  • 在 xml 文件中是并加载到活动中
  • 使用 ANIMATOR --- 不是动画!使用 android.R.ANIMATOR.fade_in ,不要使用 android.R.ANIM.fade_in - 它有行为错误

标签: android


【解决方案1】:

除了@MD 代码

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();

ft.setCustomAnimations(R.anim.fade_in,
                R.anim.fade_out);
ft.replace(R.id.realtabcontent, fragment);
ft.commit();

当你弹出片段时,然后应用如下动画:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.fade_out, R.anim.fade_in);

ft.replace(R.id.realtabcontent, fragment);      
ft.commit();

和用于淡入的 XML

<set xmlns:android="http://schemas.android.com/apk/res/android">
       <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

和用于淡出的 XML

<set xmlns:android="http://schemas.android.com/apk/res/android">
       <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

【讨论】:

  • 您实际上并不需要为基本动画创建 xml。使用默认值:setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
  • @Nexen 是的.. 但如果你注意到 M D 的评论,那家伙要求提供 xml 文件代码。
  • 使用 ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);而不是 ft.setCustomAnimations(R.anim.fade_out, R.anim.fade_int);。第一个参数是进入第二个参数是退出。
  • @Nexen 不是真的。您不能使用 anim 代替 animator 。您只能对片段事务使用动画器默认值,如下所示:(android.R.animator.fade_in, android.R.animator.fade_out);
  • @Qadeer Hussain 请接受此正确答案
【解决方案2】:

当您推送 Fragment 时,应用如下动画:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();

ft.setCustomAnimations(R.anim.fade_in,
                R.anim.fade_out);
ft.replace(R.id.realtabcontent, fragment);
ft.commit();

当你弹出 Fragment 时,应用动画如下:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.fade_out, R.anim.fade_in);

ft.replace(R.id.realtabcontent, fragment);      
ft.commit();

希望这对你有用。

更新:欲了解更多信息,请访问

  1. http://android-er.blogspot.in/2013/04/implement-animation-in.html
  2. Animate the transition between fragments

【讨论】:

  • 能否提供 xml 文件代码,因为它在我的情况下不起作用
  • 好的,它对我有用,但我希望第一帧淡入,然后第二帧在一段时间后淡出
  • @QadeerHussain 根据您的要求更改订单
  • 谢谢,但唯一的问题是我想在一段时间后第一次淡入淡出开始,例如,如果淡入持续时间 3000 则在 3000 毫秒时间后开始淡出
  • .setCustomAnimation 必须在.replace() 之前设置,否则不起作用
【解决方案3】:

值得补充的是,setCustomAnimations 也可以有 4 个参数:

FragmentTransaction setCustomAnimations (int enter, 
                                         int exit, 
                                         int popEnter, 
                                         int popExit)

为片段设置特定的动画资源以运行 进入和退出本次交易。 popEnter 和 popExit 动画将播放进入/退出操作,特别是在 弹出回栈。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 2019-01-01
    • 2014-01-20
    • 2012-12-18
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多