2011-04-14 46 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); 
} 

當然,您必須在目標活動中執行此操作。