Wie kann ich eine Animation bereitstellen, wenn ich eine andere Aktivität in Android aufrufe?


115

Ich habe zwei Aktivitäten A und B. Ich möchte die Animation verkleinern, wenn Aktivität A B aufruft, und die Animation maximieren, wenn Aktivität B A aufruft. Ich benötige dafür keine XML-Animationsdateien.

Wenn wir eine andere Aktivität in Android aufrufen, wird die Standardanimation und anschließend die Schrumpfanimation aufgerufen.

Ich möchte, dass die Standardanimation nicht und die gewünschte Animation angezeigt wird.

Können wir die Animation tatsächlich geben, wenn wir eine andere Aktivität aufrufen?

Antworten:


144

Seit API 16 können Sie beim Aufrufen von Context.startActivity (Intent, Bundle) oder verwandten Methoden ein Aktivitätsoptionspaket bereitstellen . Es wird über den Builder ActivityOptions erstellt :

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

Vergessen Sie nicht, die anderen Methoden des Builders ActivityOptions und des ActivityOptionsCompat zu überprüfen, wenn Sie die Support-Bibliothek verwenden.



API 5+:

Für Apps mit API-Level 5+ gibt es die Activities- overridePendingTransitionMethode. Für die eingehenden und ausgehenden Animationen sind zwei Ressourcen-IDs erforderlich. Eine ID von 0deaktiviert die Animationen. Rufen Sie dies sofort nach dem startActivityAnruf an.

dh:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

Sie können die Standardanimation (von rechts einschieben) mit der Intent.FLAG_ACTIVITY_NO_ANIMATIONFlagge in Ihrer Absicht verhindern.

dh:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

Dann müssen Sie in Ihrer Aktivität einfach Ihre eigene Animation angeben.

Dies funktioniert auch für die 1.5-API (Stufe 3).


4
Was meinst du, wenn du sagst "gib deine eigene Animation an"? Wie machst Du das? Vielen Dank!
pqn

Ich habe die gleiche Frage. Wahrscheinlich in der Startanimation in onResume und onPause.
Tima

Gibt es eine Möglichkeit, stattdessen Animator zu verwenden?
Android-Entwickler

Sie können dasselbe auch nach dem Aufruf von finish () verwenden!
Thiagolr

Ist es nicht R.anim.fade_inimmer noch eine XML-Dateianimation, die wir haben sollen res\anim ?
Alex Jolig

78

Sie müssen die OverridePendingTransition-Methode verwenden, um dies zu erreichen. Diese befindet sich in der Activity-Klasse . Beispielanimationen im res / anim-Ordner des Apidemos-Beispiels. Prüfen Sie. Mehr als die Demo in ApiDemos / App / Activity / Animation überprüfen .

Beispiel:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
Danke für die Antwort. Die Methode overridePendingTransition wird von API Level 5 unterstützt, und ich möchte, dass die Anwendung von Android 1.5 unterstützt wird. Gibt es eine andere Möglichkeit, Animationen von einer Aktivität zur anderen bereitzustellen?
Sunil

5
genial! Es macht viel Spaß, mit
jemandem

@ Sunil Ich habe die gleiche Frage wie Ihre. Könnten Sie das Problem lösen? Animation mit API Level 3 oder 4 (nicht 5)
Dr. Jacky

Wenn Sie den Animationscode in onResume () belassen, wird die Animation abgespielt, wenn der Benutzer die App verlässt und zurückkommt. Nicht ideal in vielen Apps.
Vihaan Verma

Ich musste hinzufügen super.onResume();, bekam: "android.util.SuperNotCalledException: Aktivität {com.abc.MyActivity} hat nicht zu super.onResume () aufgerufen"
Gene Bo


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.