Aktivitäts-Slide-In-Animation beim Starten neuer Aktivitäten deaktivieren?

140

Ich habe eine Aktivität, die eine andere Aktivität über einen Klick auf eine Schaltfläche startet. Standardmäßig animiert das Betriebssystem in neueren Betriebssystemversionen von Android die neue Aktivität, die von rechts nach links verschoben wird.

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

user246114
quelle

Antworten:

190

Das FLAG_ACTIVITY_NO_ANIMATIONFlag eignet sich gut zum Deaktivieren der Animation beim Starten von Aktivitäten.

Um die ähnliche Animation zu deaktivieren, die beim Aufrufen finish()einer Aktivität ausgelöst wird , dh die Animation wird stattdessen von rechts nach links verschoben, können Sie overridePendingTransition(0, 0)nach dem Aufruf aufrufen, finish()und die nächste Animation wird ausgeschlossen.

Dies funktioniert auch in der Animation, wenn Sie overridePendingTransition(0, 0)nach dem Anruf anrufen startActivity(...).

Mattias
quelle
9
Beachten Sie, dass FLAG_ACTIVITY_NO_ANIMATIONund overridePendingTransitionbeide nur API Level 5+ sind.
Azdev
Dies hilft nicht, wenn Sie von einer Aktivität auf der Zurück-Taste zurückkehren.
Yar
4
Du bist der beste. overridePendingTransition (0, 0) -> ist gottähnlich. Es überschreibt nur die finish () - Animation, nicht jedoch die Animation, die ausgelöst wird, wenn die vorherige Aktivität fortgesetzt wird.
Philipp Jahoda
1
Ich mag diese Antwort nicht, weil sie keine Übergänge abdeckt, die durch Drücken der Softkeys "Zurück" verursacht werden. OP fragt, wie die Animation "deaktiviert" werden soll, nicht "die App selektiv
anweisen soll
3
Wenn Sie auch die "Zurück" -Animation deaktivieren oder überschreiben möchten, überschreiben Sie die Methode finish () in Ihrer Aktivität und fügen Sie diesen Aufruf zusammen mit einem Aufruf von super.finish () ein. Problem gelöst.
Grishka
171

IMHO diese Antwort hier lösen Problem auf die eleganteste Weise ..

Entwickler sollten einen Stil erstellen ,

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

Setzen Sie es dann im Manifest als Thema für die Aktivität oder die gesamte Anwendung.

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

Voila! Schön und einfach..

ps Credits an Originalautor bitte ..

Ewoks
quelle
1
Es funktioniert nicht für Back und es ändert das Aussehen der Titelleiste (es macht es klein) ...
Marek
Sind Sie sicher, dass Sie keine anderen Eigenschaften im Stil hinzugefügt haben, denn niemand anderes hat diesen "Effekt" gemeldet, den Sie erwähnen.
Ewoks
Nur als Referenz kann dies zu einem Problem in einer Ansichtshierarchie führen, in der Sie WindowsFeature () anfordern müssen.
Martin Marconcini
wäre schön, wenn du ein bisschen
Ewoks
4
@Marek Ich denke, dein Problem besteht darin, das übergeordnete = "android: Theme" nicht richtig zu ändern. Sie sollten es mit dem gewünschten Thema ändern. Im Grunde deaktiviert dieser Code nur die spezifische Animation in einem Thema. Verwenden Sie beispielsweise "Theme.AppCompat.Light.NoActionBar" anstelle von "android: Theme", und Sie erhalten, was ich meine. Ich hoffe, es hilft.
Recomer
33

Anwenden

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

dann

overridePendingTransition(0, 0);

Dadurch wird die Animation gestoppt.

Siddharth_Vyas
quelle
28

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

Um zu vermeiden, dass Animationen angezeigt werden, wenn Sie Intenteine ActivityVerwendung wünschen :

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

und um die Animation nicht zu sehen, wenn Sie die Zurück-Taste drücken, überschreiben Sie die onPauseMethode in Ihremnewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Sasa
quelle
19

Geben Sie Intent.FLAG_ACTIVITY_NO_ANIMATIONbeim Start einfach das Flag an

Alexander Kosenkov
quelle
13

Dies funktioniert bei mir beim Deaktivieren der Animation "Fertig stellen".

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
cmcromance
quelle
9

Ich bin in 4.4.2 und das Aufrufen von overridePendingTransition (0, 0) in onCreate () der Startaktivität deaktiviert die Startanimation (das Aufrufen von overridePendingTransition (0, 0) unmittelbar nachdem startActivity () NICHT funktioniert hat). Wie in einer anderen Antwort erwähnt, deaktiviert das Aufrufen von overridePendingTransition (0, 0) nach finish () die schließende Animation.

Übrigens habe ich festgestellt, dass das Festlegen des Stils mit "android: windowAnimationStyle"> @ null (eine andere hier erwähnte Antwort) einen Absturz verursachte, als meine Startaktivität versuchte, den Titel der Aktionsleiste festzulegen. Beim weiteren Debuggen stellte ich fest, dass window.hasFeature (Window.FEATURE_ACTION_BAR) in der initActionBar () der Aktivität fehlschlägt.

Steve B.
quelle
1
Was ist mit Onresume? Single-Top-Aktivitäten und so weiter.
Lassi Kinnunen
7

FLAG_ACTIVITY_NO_ANIMATION mag funktionieren, hat aber in Kombination mit FLAG_ACTIVITY_CLEAR_TASK und FLAG_ACTIVITY_NEW_TASK nicht den Trick für mich getan. Ich sehe anscheinend die Animation 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 hat, war "overridePendingTransition (0, 0)" aufzurufen. entweder unmittelbar nach meinem Aufruf von startActivity () oder onPause (). Beide Methoden haben funktioniert, aber wenn ich es nach startActivity () mache, habe ich etwas mehr Kontrolle darüber, wann ich Animationen möchte und wann nicht.

Wookie
quelle
2

Ich hatte ein ähnliches Problem damit, dass beim Übergang von einer Aktivität zu einer anderen mit ein schwarzer Bildschirm angezeigt wurde overridependingtransition. und ich folgte dem Weg unten und es funktionierte

1) einen noanim.xmlin anim Ordner erstellt

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

Der erste Parameter als meine ursprüngliche Animation und der zweite Parameter, der die Exit-Animation als meine Dummy-Animation ist

Karthika PB
quelle
1

Um den schwarzen Hintergrund zu vermeiden , wenn eine Aktivität bereits in dem Stapel ausgehend, habe ich overridePendingTransition(0,0)in onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
Alex Huiculescu
quelle