Come fornire l'animazione quando si chiama un'altra attività in Android?


115

Ho due attività A e B. Desidero avere l'animazione ridotta quando l'attività A chiama B e massimizzare l'animazione quando l'attività B chiama A. Non ho bisogno dei file xml di animazione per questo.

Quando chiamiamo un'altra attività in Android, fornisce la sua animazione predefinita e quindi chiama l'animazione di riduzione.

Quello che voglio è che l'animazione predefinita non si verifichi e l'animazione che desidero dovrebbe verificarsi.

Possiamo effettivamente dare l'animazione quando si chiama un'altra attività?

Risposte:


144

A partire dall'API 16 è possibile fornire un bundle di opzioni di attività quando si chiama Context.startActivity (Intent, Bundle) o metodi correlati. Viene creato tramite il builder ActivityOptions :

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

Non dimenticare di controllare gli altri metodi del builder ActivityOptions e ActivityOptionsCompat se stai usando la libreria di supporto.



API 5+:

Per le app destinate al livello API 5+, esiste il overridePendingTransitionmetodo delle attività . Sono necessari due ID risorsa per le animazioni in entrata e in uscita. Un ID 0disabiliterà le animazioni. Chiamalo subito dopo la startActivitychiamata.

vale a dire:

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

API 3+:

Puoi impedire l'animazione predefinita (Scorri da destra) con il Intent.FLAG_ACTIVITY_NO_ANIMATIONflag nel tuo intento.

vale a dire:

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

quindi nella tua attività devi semplicemente specificare la tua animazione.

Funziona anche per l'API 1.5 (Livello 3).


4
Cosa intendi quando dici "specifica la tua animazione"? Come fai a fare questo? Grazie!
pqn

Ho la stessa domanda. Probabilmente nell'animazione di avvio in onResume e onPause.
Tima

c'è un modo per usare Animator invece?
sviluppatore Android

Puoi anche usare lo stesso dopo aver chiamato finish ()!
thiagolr

Non è R.anim.fade_inancora un'animazione di file xml che supponiamo di avere res\anim ?
Alex Jolig

78

È necessario utilizzare il metodo OverridePendingTransition per ottenerlo, che si trova nella classe Activity . Animazioni di esempio nella cartella res / anim dell'esempio apidemos. Controllalo. Più che controllare la demo in ApiDemos / App / Activity / animation .

Esempio:

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

1
Grazie per la risposta. Il metodo overridePendingTransition è supportato dal livello API 5 e desidero che l'applicazione sia supportata da Android 1.5. Esiste un altro modo per fornire l'animazione da un'attività all'altra.
domenica

5
eccezionale! questo è molto divertente con cui giocare
Someone Somewhere,

@sunil ho la stessa domanda come la tua. Potresti risolvere il problema? Animazione con api livello 3 o 4 (non 5)
Dr.jacky

mantenendo il codice dell'animazione in onResume (), l'animazione verrà riprodotta quando l'utente esce dall'app e torna indietro. Non ideale in molte app.
Vihaan Verma

Dovevo aggiungere super.onResume();, stava ottenendo: "android.util.SuperNotCalledException: Activity {com.abc.MyActivity} non ha chiamato a super.onResume ()"
Gene Bo


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.