2012-02-15 10 views
36

Quello che sto cercando di ottenere è di ignorare l'animazione dell'attività iniziale.Appare una nuova attività dietro la precedente durante la transizione

L'animazione dovrebbe dare l'impressione che la vecchia attività sia in cima alla nuova attività, quindi scorri verso il basso e fuori dallo schermo per rivelare la nuova attività. Ho provato diversi modi come utilizzare overridePendingTransition(startAnim, exitAnim) ma il problema è che entrambi si animano nella stessa timeline. Quindi overridePendingTransition(R.anim.hold, R.anim.exit_slide_down); Non vedi mai l'animazione di uscita perché la nuova attività è in primo piano. Questo può essere ottenuto usando la struttura?

enter image description here

+0

io credo che si possa ritardare un'animazione, mi dispiace per non essere più di aiuto però. – Warpzit

+0

possibile duplicato di [Posso modificare l'animazione di transizione Android startActivity()?] (Http://stackoverflow.com/questions/3515264/can-i-change-the-android-startactivity-transition-animation) –

risposta

31

In realtà, ho trovato una proprietà chiamata android:zAdjustment nelle file di animazione.

Se metto android:zAdjustment="bottom" a hold.xml (schermata 2) e android:zAdjustment="top" in push_down_out.xml (schermata 1) allora può ottenere l'effetto desiderato.

Questo aggira il problema degli ordini z (ho pensato che fosse un problema con i tempi di animazione, quindi stavo abbaiando dall'albero sbagliato).

John

+4

Puoi includere come sono visualizzati i file di animazione? – Emil

+0

Questo è il motivo per cui anche la mia animazione di transizione non veniva riprodotta. Come bonus aggiuntivo, ho solo dovuto aggiungere l'androide: zAdjustment = "top" a exitanimation (quello che volevo giocare in cima), quindi non hai nemmeno bisogno del "bottom". – MacD

+0

@johncc puoi includere file xml e codice sorgente? Grazie! –

30

Ho cercato di risolvere la soluzione in un progetto di esempio e ho ottenuto che funziona con questo codice:

chiamata l'animazione con:

startActivity(new Intent(this, Activity2.class)); 
overridePendingTransition(R.anim.push_down_in,R.anim.push_down_out); 

R.anim .push_down_in:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="300"/> 
</set> 

R.anim.push_down_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300"/> 
</set> 
+2

in realtà se dà una durata diversa per ogni animazione, dà un'impressione davvero interessante. Ad esempio per R.anim.push_down_in: 'android: duration =" 900 "' e per R.anim.push_down_out: 'android: duration =" 1500 "' – mehmet

7

La soluzione che funziona per me:

R.anim.exit_slide_down

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

    <translate android:fromYDelta="0" 
       android:toYDelta="100%p" 
       android:duration="600" /> 
</set> 

... e poi

Intent intent = new Intent(activity, SecondActivity.class); 
startActivity(intent); 
activity.overridePendingTransition(0, R.anim.exit_slide_down); 
Problemi correlati