2010-12-02 12 views
67

Estoy usando overridePendingTransition para cuando se crea mi actividad y funciona bien. Puedo ver que el fundido funciona muy bien, pero cuando intento animar el final de la actividad todavía está haciendo la diapositiva predeterminada de derecha a izquierda.Cómo puedo agregar una animación a la actividad finish()

intentó por primera vez la definición de la animación a cabo cuando comienzo a la actividad de la siguiente manera:

Intent myIntent = new Intent(a, SkdyAlert.class); 
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    a.startActivity(myIntent); 
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
     AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout); 
    } 

Entonces intenté hacerlo cuando termine la actividad, así

okBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      finish(); 
      if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
       AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout); 
      } 
     } 
    }); 

Pero ninguno de estos enfoques evitará que la diapositiva de "derecha a izquierda" se salga de la animación. ¿Alguna idea sobre lo que estoy haciendo mal?

Respuesta

186

Anulo la transición pendiente justo después de llamar a finish();

En mi caso, lo he hecho para evitar transiciones.

finish(); 
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing); 

El orden es importante :)

+4

por "Detalles", @Goofyahead es nombrando su actividad adjunta - ymmv. Esta técnica funcionó para mí para reemplazar una animación de Theme.Dialog en 2.x, pero no 3.xo 4.x – larham1

+7

¿Cómo se ve 'R.anim.nothing'? – sandalone

+0

Utilice la respuesta de @Felipe Micaroni Lalli, 0 significa que no hay animación. – Yeung

11

Mire en hacerlo a través de un tema. Puede definir ingresar animaciones de salida para actividades o toda la aplicación

+0

YES! Eso fue todo. Así un poco. Ya había aplicado un tema y el tema tenía una animación definida, por eso no pude hacer funcionar mi propia animación. ¡Muchas gracias por la información! –

+2

puede darme una pista sobre dónde buscar qué transiciones serán entregadas por los temas. También me gustaría establecer una transición personalizada a todos los sitios, pero no sé cómo. –

+0

@schwiz Algún código o un ejemplo sería bueno. – Zapnologica

6

Después de la respuesta por @schwiz, aquí es una anulación de animación para la incorporada en el tema de diálogo, donde he definido slide_up local y animaciones slide_down. Mi actividad especifica el tema MyDialog para tener estas transiciones dentro y fuera.

<style name="Animation.MyDialog" parent="android:Animation.Dialog"> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
</style> 

<style name="Theme.MyDialog" parent="android:Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item> 
</style> 

13
finish(); 
overridePendingTransition(0, 0); 
5

Uso startActivityForResult para iniciar su actividad infantil y en onActivityResult() de su actividad principal:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==REQUEST_YOUR_ACTIVITY) { 
     overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim); 
    } 
    super.onActivityResult(requestCode, resultCode, arg2); 
} 
+0

Esto funciona en retroceso (botón físico). Para que también funcione con la flecha "hacia arriba", consulte esta respuesta: [https://stackoverflow.com/questions/20161234/onactivityresult-is-not-llamado-cuando-el-botón-de-backback-in-actionbar-is -clicked/20161352 # 20161352] (https://stackoverflow.com/questions/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is-clicked/20161352#20161352) – lenooh

14

me fijo este problema utilizando este tipo de acercamiento:

para abrir con la animación:

Intent newUser = new Intent(getBaseContext(), NewUserActivity.class); 
    startActivity(newUser); 
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left); 

Para cerrar con la animación:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    onBackPressed(); 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right); 
} 
13

sugeriría a utilizar el método isFinishing() para configurar las animaciones en onPause en lugar de llamar acabado()

@Override 
protected void onPause() { 
    super.onPause(); 
    if (isFinishing()){ 
     overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out); 
    } 

} 
11

Esta pregunta ya ha respondido, pero la forma más eficiente de poner una animación al salir de una actividad es anulando el método "finish()" de la relacionada actividad:

@Override 
public void finish() { 
    super.finish(); 
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom); 
} 
+1

did no trabaje conmigo –

+0

¿Probaste exactamente lo que escribí (dentro de una actividad)? – webmaster

0
if (getEnterAnimation() > -1 && getExitAnimation() > -1) { 
    overridePendingTransition(getEnterAnimation(), getExitAnimation()); 
} 

donde estos métodos devuelven animaciones de R.anim.YOUR_ANIMATION_XML

añadir este código en tu onCreate() antes de

setContentView() 

y en su onPause() antes de

super.onPause() 

He intentado añadir este código antes de/dentro de estos métodos, pero el no la animación de salida trabajado

startActivity() 
finish() 
onBackPressed() 
Cuestiones relacionadas