2013-02-26 19 views
10

Quello che sto cercando di ottenere è: avviare una nuova attività con un'animazione di transizione per l'attività in uscita solo.Android Activity Transition Animation

Vorrei fare scorrere l'attività corrente, dove la nuova attività sarà dietro quella corrente.

Ecco la diapositiva di animazione: R.layout.slide_up

<set xmlns:android="http://schemas.android.com/apk/res/android"> 

    <translate 
     android:duration="1000" 
     android:fromYDelta="0%" 
     android:toYDelta="100%" /> 

</set> 

Ecco come Mi candido il passaggio di attività di animazione:

overridePendingTransition (0 , R.anim.slide_up); 

I Sto utilizzando 0 per l'attività di inserimento dal momento che non voglio alcuna animazione per il nuovo attività, e non funziona (l'animazione non viene eseguita). Se uso un'animazione per l'immissione di attività troppo, funziona (entrambe le animazioni vengono eseguite), come ad esempio:

overridePendingTransition (R.anim.slide_out , R.anim.slide_up); 

dove R.anim.slide_out:

<set xmlns:android="http://schemas.android.com/apk/res/android"> 

    <translate 
     android:duration="1000" 
     android:fromYDelta="100%" 
     android:toYDelta="0%" /> 

</set> 

Qualsiasi idee?

Sto lavorando su Android 4.1.2 e Android 4.0.4

risposta

12

alterare la vostra animazione di uscita in modo che rende sopra la parte superiore delle attività in entrata.

R.anim.slide_up

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:zAdjustment="top"> 

    <translate 
     android:duration="1000" 
     android:fromYDelta="0%" 
     android:toYDelta="100%" /> 

</set> 

Poi si può fare quello che stavi facendo in origine per impostare l'animazione.

overridePendingTransition (0 , R.anim.slide_up); 
3

Ho esattamente la stessa transizione e tale animazione funziona per me:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_interpolator" 
android:fromYDelta="0%" android:toYDelta="100%" android:zAdjustment="top" 
android:duration="300" /> 
+1

Questo perché non è esattamente la stessa transizione. Hai il set di proprietà zAdjustment = "top" che consente all'animazione in uscita di giocare sopra l'animazione in entrata poiché, di default, l'animazione che entra gioca sull'uscita. – MCeley

+0

questo è il punto :) – Zielony

1

utilizzare la linea di seguito dopo startActivity

overridePendingTransition(0,0); 

Questo sovrascriverà l'animazione di default e fare nessuna animazione . Si può anche dare un po 'di animazione personalizzato se vi piace

overridePendingTransition(R.anim.animation1,R.anim.animation2); 
0

Ovunque si sta chiamando l'intento di avviare l'attività, è necessario modificare l'intento. ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle());

Se avete qualsiasi metodo dedicato alla setupTransitions() È possibile inserire le prossime due righe di codice lì, altrimenti si può metterli in onCreate()

getWindow().setEnterTransition(new Slide(Gravity.RIGHT).setDuration(800)); 

gravità.DESTRO è ciò che determina la direzione da cui vuoi iniziare la tua prossima attività. Il metodo setDuration() è facoltativo, per la transizione più semplice l'ho usato, non è necessario.

Esplora di più giocando con le diverse proprietà Gravity e setDuration.