2010-04-16 10 views
107

Ho due Attività A e B. Voglio avere l'animazione di restringimento quando Attività A chiama B e massimizza l'animazione quando Attività B. chiama A. Non ho bisogno dei file di animazione xml per questo.Come fornire animazione quando si chiama un'altra attività in Android?

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

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

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

risposta

129

Dal API 16 puoi fornire un pacchetto opzioni di attività al momento della chiamata Context.startActivity(Intent, Bundle) o relativi metodi. Si è creato attraverso il ActivityOptions costruttore:

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 le altre metodi del costruttore ActivityOptions e il ActivityOptionsCompat se si utilizza la libreria di supporto.



API 5+:

Per le applicazioni destinate livello di API 5+ c'è il metodo Attività overridePendingTransition. Occorrono due ID risorsa per le animazioni in entrata e in uscita. Un id di 0 disabiliterà le animazioni. Chiamalo subito dopo la chiamata startActivity.

cioè .:

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

API 3+:

È possibile impedire l'animazione di default (Far scorrere da destra) con la bandiera Intent.FLAG_ACTIVITY_NO_ANIMATION nel vostro intento.

cioè .:

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

poi nella vostra attività è sufficiente specificare il proprio animazione.

Questo 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

+0

Ho la stessa domanda. Probabilmente in animazione iniziale in onResume e onPause. – Tima

+0

esiste un modo per utilizzare Animator? –

78

Per ottenerlo è necessario utilizzare il metodo OverridePendingTransition, che si trova nello Activity class. 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 voglio che l'applicazione sia supportata da Android 1.5. C'è un altro modo per fornire l'animazione da un'attività all'altra. – sunil

+5

fantastico! questo è molto divertente da giocare con –

+0

@sunil ho la stessa risoluzione del tuo.potresti risolvere il problema? l'animazione con livello 3 o 4 (non 5) –

3

Jelly Bean aggiunge il supporto per questo con il metodo ActivityOptions.makeCustomAnimation(). Naturalmente, dal momento che è solo su Jelly Bean, è praticamente inutile per scopi pratici.

+5

Non è più inutile :) –

+0

Usa 'ActivityOptionsCompat' se scegli come target pre-JellyBean. –

Problemi correlati