2011-04-14 80 views
21

我在我的应用程序中有多个不同的活动,我不希望任何活动之间更改时的过渡动画。以下是我如何在活动之间进行更改:Android - 如何停止活动变化之间的动画

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

这很适合第一次启动新的活动。没有动画,但是当我回到已经启动的Activity时,似乎忽略了“Intent.FLAG_ACTIVITY_NO_ANIMATION”,并且发生默认动画。

我似乎无法弄清楚为什么会发生这种情况。

回答

38

您是否试过overridePendingTransition()

+5

不,我没有尝试'overridePendingTransition(0,0)'。我在每个活动onResume()和onPause()中使用它。它工作完美。 谢谢! – KevinM 2011-04-15 01:17:01

+0

它帮助我在Nexus 7上,但它不在我的SGS4上。有没有其他方法可以解决这个问题?谢谢。 – 2015-06-07 21:51:42

+0

@ oleg.semen:从[此问题的另一个答案]尝试主题方法(http://stackoverflow.com/a/18973007/115145)。 – CommonsWare 2015-06-07 21:52:56

3

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

我做了以下内容:

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

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

因此,我添加了FLAG_ACTIVITY_NO_HISTORY以清除或完成活动,当它开始新的活动。这导致当我再次点击菜单时创建新的活动(没有动画)。

+0

但不是这个错误的“不做动画”修复,同时允许活动仍然被创建? – Miguel 2014-05-18 10:42:40

+0

我相信从没有动画的背部堆栈中提取活动可能是最好的解决方案。 – 2014-05-18 14:03:05

13

您可以在清单代码和FLAG_ACTIVITY_NO_ANIMATION设置FLAG_ACTIVITY_REORDER_TO_FRONT如下:

在res /价值/ 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"/> 

我希望它可以帮助你时,返回到第一个意图创建第二个意图

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

3

添加此,动画被禁用,工作对我来说,虽然

0

如果您在使用FLAG_ACTIVITY_REORDER_TO_FRONT,那么你也可以重写onNewIntent以用于以后的startActivity调用。这只会使第一个电话进入前台状态。

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

当然,您必须在目标活动中执行此操作。