2012-02-15 6 views
36

Lo que intento lograr es anular la animación de la actividad de inicio.Hacer aparecer una actividad nueva detrás de la anterior durante la transición

La animación debe dar la impresión de que la actividad anterior se encuentra en la parte superior de la nueva actividad, y luego se desliza hacia abajo y hacia afuera de la pantalla para revelar la nueva actividad. Lo he intentado de múltiples maneras, como usar overridePendingTransition(startAnim, exitAnim) Pero el problema es que ambos animan en la misma línea de tiempo. Entonces, overridePendingTransition(R.anim.hold, R.anim.exit_slide_down); Nunca verá la animación de salida porque la nueva actividad está en la parte superior. ¿Se puede lograr esto usando el marco?

enter image description here

+0

Creo que se puede retrasar una animación, lo siento por no ser de más ayuda sin embargo. – Warpzit

+0

posible duplicado de [¿Puedo cambiar la animación de transición de Android startActivity()?] (Http://stackoverflow.com/questions/3515264/can-i-change-the-android-startactivity-transition-animation) –

Respuesta

31

En realidad, he encontrado una propiedad llamada android:zAdjustment en los archivos de animación.

Si pongo android:zAdjustment="bottom" en hold.xml (Imagen 2) y android:zAdjustment="top" en push_down_out.xml (Imagen 1), entonces yo puede conseguir el efecto deseado.

Esto soluciona el problema de la orden z (supuse que era un problema con los tiempos de animación, así que estaba ladrando al árbol equivocado).

John

+4

¿Podría incluir cómo eran sus archivos de animación? – Emil

+0

Esto resultó ser por qué mi animación de transición no se estaba reproduciendo, tampoco. Como una ventaja adicional, solo tuve que agregar android: zAdjustment = "top" a la exitanimación (la que quería jugar en la parte superior), por lo que ni siquiera necesitas la de "abajo". – MacD

+0

@johncc ¿puede incluir archivos xml y código fuente? ¡Gracias! –

30

que he estado tratando de resolver su solución en un proyecto de ejemplo y lo conseguí trabajar con este código:

de llamadas con la animación:

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

en realidad si da una duración diferente para cada animación, da una impresión realmente genial. Por ejemplo para R.anim.push_down_in: 'android: duration =" 900 "' y para R.anim.push_down_out: 'android: duration =" 1500 "' – mehmet

7

La solución que funciona para mí:

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> 

... y luego

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