2010-02-18 7 views
96

Ich habe eine Aktivität, die eine andere Aktivität per Knopfdruck startet. Bei neueren OS-Versionen von Android animiert das Betriebssystem standardmäßig die neue Aktivität von rechts nach links.Aktiviere die Einführungs-Animation beim Starten neuer Aktivitäten?

Gibt es eine Möglichkeit, diese Animation zu deaktivieren? Ich möchte nur, dass die neue Aktivität ohne jegliche Animation angezeigt wird.

Antwort

15

Geben Sie einfach Intent.FLAG_ACTIVITY_NO_ANIMATION Flag, wenn

154

Die FLAG_ACTIVITY_NO_ANIMATION Flag funktioniert zum Deaktivieren der Animation beginnt, wenn Aktivitäten zu starten.

Um die ähnliche Animation zu deaktivieren, die ausgelöst wird, wenn finish() auf einer Aktivität, das heißt die Animationsfolien von rechts aufrufen, anstatt nach links, Sie overridePendingTransition(0, 0) nach finish() Aufruf und die nächste Animation ausgeschlossen werden aufrufen können.

Dies funktioniert auch auf der In-Animation, wenn Sie overridePendingTransition(0, 0) nach dem Aufruf startActivity(...) aufrufen.

+8

Hinweis drücken zurück, dass ' FLAG_ACTIVITY_NO_ANIMATION' und 'overridePendingTransition' sind beide nur API Level 5+. – azdev

+0

Dies hilft nicht, wenn Sie von einer Aktivität auf der Zurück-Taste zurückkehren. – Yar

+1

überprüfen Sie meine Antwort .. – Ewoks

123

IMHO this hier beantworten lösen Problem in der eleganteste Weg ..

Entwickler einen Stil,

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

dann in manifest Satz erstellen sollte es als Thema für Aktivität oder ganze Anwendung .

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme"> 
</activity> 

Voila! Schön und einfach.

p.s. Sie Kredite an ursprünglichen Autor ..

+1

das ist viel eleganter –

+0

Funktioniert das für Aktivität Zurück auch? –

+1

yeap, es funktioniert ..;) Hoffe, dass Sie es nützlich finden .. Prost – Ewoks

17

Bewerben

startActivity(new Intent(FirstActivity.this,SecondActivity.class)); 

dann

overridePendingTransition(0, 0); 

Dies wird die Animation zu stoppen.

8

Dies funktioniert für mich beim Deaktivieren der Aktivität Animation beenden.

@Override 
protected void onPause() { 
    super.onPause(); 
    overridePendingTransition(0, 0); 
} 
8

ich auf 4.4.2 bin, und Aufruf overridePendingTransition (0, 0) in der Startaktivität des onCreate() wird die Startanimation (Aufruf overridePendingTransition (0, 0) unmittelbar nach startActivity() deaktivieren funktioniert nicht). Wie in einer anderen Antwort erwähnt, wird durch Aufruf von overridePendingTransition (0, 0) nach finish() die schließende Animation deaktiviert.

Btw, ich fand, dass das Setzen des Stils mit "android: windowAnimationStyle"> @ null (eine andere hier erwähnte Antwort) einen Absturz verursachte, als meine Startaktivität versuchte, den Aktionsleistentitel zu setzen. Debugging weiter, ich entdeckte, dass dies window.hasFeature (Window.FEATURE_ACTION_BAR) irgendwie in der initActionBar() -Aktivität der Aktivität verursacht.

+1

was ist mit onresume? Single-Top-Aktivitäten und all das. –

7

FLAG_ACTIVITY_NO_ANIMATION möglicherweise funktionieren, aber nicht den Trick für mich, wenn mit FLAG_ACTIVITY_CLEAR_TASK und FLAG_ACTIVITY_NEW_TASK kombiniert.Ich sehe die Animation anscheinend zum Erstellen einer neuen Aufgabe mit einem neuen Aktivitätsstapel, während ich seitlich zu meinen anderen Ansichten der obersten Ebene navigiere.

Was hier funktioniert war Aufruf "overridePendingTransition (0, 0);" entweder direkt nach meinem Aufruf von startActivity() oder onPause(). Beide Möglichkeiten haben funktioniert, aber nach startActivity() gibt es mir mehr Kontrolle darüber, wann ich Animationen möchte und wann nicht.

-1

Ich hatte ein ähnliches Problem, einen schwarzen Bildschirm auf gleitenden Übergang von einer Aktivität zu einer anderen zu sehen mit overridependingtransition. und ich folgte der Weg unten und es funktionierte

1) erstellt eine noanim.xml in anim Ordner

 <?xml version="1.0" encoding="utf-8"?> 

     <translate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="@android:integer/config_longAnimTime" 
     android:fromYDelta="0%p" 
     android:toYDelta="0%p" 

/> 

und verwendet

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim); 

den ersten Parameter als meine ursprüngliche Animation und zweiten Parameter, ist die Exit-Animation als meine Dummy-Animation

11

Meiner Meinung nach ist die beste Antwort zu verwenden "overridePendingTransition(0, 0);"

zu vermeiden Animation zu sehen, wenn Sie einen Activity Gebrauch Intent wollen:

this.startActivity(new Intent(v.getContext(), newactivity.class)); 
this.overridePendingTransition(0, 0); 

und nicht die Animation zu sehen, wenn Sie außer Kraft setzen Taste Methode in Ihrem newactivity

@Override 
protected void onPause() { 
    super.onPause(); 
    overridePendingTransition(0, 0); 
} 
Verwandte Themen