【问题标题】:Android - How to stop animation between activity changesAndroid - 如何在活动更改之间停止动画
【发布时间】:2017-03-22 01:53:42
【问题描述】:

我的应用中有多个不同的 Activity,我不希望在不同 Activity 之间切换时出现任何过渡动画。以下是我在活动之间的变化:

Intent i = new Intent(FirstActivity.this, SecondActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(i);

这在我第一次开始新活动时非常有用。没有动画,但是当我回到一个已经开始的活动时,似乎“Intent.FLAG_ACTIVITY_NO_ANIMATION”被忽略了,默认动画发生了。

我似乎无法弄清楚为什么会这样。

【问题讨论】:

    标签: android animation android-intent flags


    【解决方案1】:

    【讨论】:

    • 不,我没有尝试过'overridePendingTransition(0,0)'。我在每个活动 onResume() 和 onPause() 中都使用了它。它工作完美。谢谢!!!
    • 它在我的 Nexus 7 上帮助了我,但在我的 SGS4 上却没有。有没有其他方法可以解决这个问题?谢谢。
    • @oleg.semen:试试another answer on this question的主题方法。
    【解决方案2】:

    您可以通过代码设置 FLAG_ACTIVITY_REORDER_TO_FRONT 和清单中的 FLAG_ACTIVITY_NO_ANIMATION 如下:

    在 res/values/styles.xml 中创建 noAnimTheme

    <style name="noAnimTheme" parent="android:Theme">
       <item name="android:windowAnimationStyle">@null</item>
    </style>
    

    <style name="noAnimTheme" parent="android:Theme.NoTitleBar">
       <item name="android:windowAnimationStyle">@null</item>
    </style>
    

    并在清单中使用它:

    <activity android:name="SecondActivity" android:theme="@style/noAnimTheme"/>
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      我需要这个,因为我必须在点击菜单时创建活动。

      我做了以下事情:

      我在意图中添加了FLAG_ACTIVITY_NO_ANIMATION 标志。它在第一次创建活动时停止了动画。

      但是,当我们再次单击同一个菜单(可能来自不同的活动)时调用堆栈中的活动,它具有动画。

      所以我添加了FLAG_ACTIVITY_NO_HISTORY 以在开始新活动时清除或完成活动。当我再次单击菜单时,这会导致创建一个新活动(没有动画)。

      【讨论】:

      • 但这不是错误的“不制作动画”修复,同时仍然允许创建活动吗?
      • 我相信在没有动画的情况下将活动从后台堆栈中引入,可能是最好的解决方案。
      【解决方案4】:

      在创建第二个意图后添加它

              Intent i = new Intent(SecondActivity.this, FirstActivity.class);
              i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
              i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
              startActivity(i);
      

      当您返回第一个意图时,动画被禁用,但对我有用

      【讨论】:

        【解决方案5】:

        如果您使用的是 FLAG_ACTIVITY_REORDER_TO_FRONT,那么您还可以覆盖 onNewIntent 以便以后调用 startActivity。这仅适用于提早状态而不是第一次调用。

        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            overridePendingTransition(R.anim.whatever, R.anim.whatever);
        }
        

        当然,您必须在目标活动中实现这一点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-14
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多