2010-04-16 11 views
107

Tengo dos Actividades A y B. Quiero tener la Animación contraída cuando La Actividad A llama a B y maximiza la animación cuando la Actividad B llama A. No necesito los archivos xml de animación para esto.¿Cómo proporcionar animación cuando se llama a otra actividad en Android?

Cuando llamamos a otra actividad en Android da su animación predeterminada y luego llama la animación de reducción.

Lo que quiero es que no se produzca la animación predeterminada y que se produzca la animación que deseo.

¿Podemos realmente dar la animación cuando llamamos a otra actividad?

Respuesta

129

Desde API 16 se puede suministrar un paquete de opciones de actividades al llamar Context.startActivity(Intent, Bundle) o relacionadas métodos. Se crea mediante el constructor ActivityOptions:

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()); 

No se olvide de comprobar los otros métodos de la constructora y la ActivityOptions ActivityOptionsCompat si está utilizando la biblioteca de soporte.



API 5+:

Para aplicaciones dirigidas a nivel API 5+ existe la overridePendingTransition método Actividades. Se necesitan dos ID de recursos para las animaciones entrantes y salientes. Una identificación de 0 deshabilitará las animaciones. Llame esto inmediatamente después de la llamada startActivity.

es decir .:

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

API 3+:

Usted puede prevenir la animación por defecto (diapositiva desde la derecha) con el indicador Intent.FLAG_ACTIVITY_NO_ANIMATION en su intento.

es decir .:

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

luego en su actividad simplemente tiene que especificar su propia animación.

Esto también funciona para el 1.5 API (Nivel 3).

+4

¿Qué quiere decir? cuando dices "especifica tu propia animación"? ¿Cómo haces esto? ¡Gracias! – pqn

+0

Tengo la misma pregunta. Probablemente en la animación de inicio en onResume y onPause. – Tima

+0

¿hay alguna manera de usar Animator en su lugar? –

78

Debe utilizar el método OverridePendingTransition para lograrlo, que se encuentra en el Activity class. Animaciones de muestra en la carpeta res/anim del ejemplo de apidemos. Revisalo. Más que ver la demostración en ApiDemos/App/Activity/animation.

Ejemplo:

@Override 
public void onResume(){ 
    // TODO LC: preliminary support for views transitions 
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); 
} 
+1

Gracias por la respuesta. El método de reemplazar PendingTransition es compatible con el nivel de API 5 y quiero que la aplicación sea compatible con Android 1.5. ¿Hay alguna otra forma de proporcionar animación de una actividad a otra? – sunil

+5

¡increíble! esto es muy divertido de jugar con –

+0

@sunil tengo la misma pregunta que la tuya. ¿Podrías resolver el problema? animación con api level 3 o 4 (no 5) –

3

Jelly Bean añade soporte para esto con el método ActivityOptions.makeCustomAnimation(). Por supuesto, ya que solo está en Jelly Bean, es prácticamente inútil para propósitos prácticos.

+5

Ya no vale la pena :) –

+0

Use 'ActivityOptionsCompat' si apunta a pre-JellyBean. –

Cuestiones relacionadas