Sólo se produce una animación en overridePendingTransition

Tengo dos actividades A y B. En A, llamo B:

Intent intent = new Intent(this, ActivityB.class); this.startActivity(intent); overridePendingTransition(R.anim.activity_animation_right_to_left, R.anim.activity_animation_zoom_in); 

Sin embargo, sólo R.anim.activity_animation_right_to_left funciona. La otra animación no se aplica. Además, al volver de B a A:

 finish(); overridePendingTransition(R.anim.activity_animation_zoom_out, R.anim.activity_animation_left_to_right); 

R.anim.activity_animation_left_to_right funciona. Estoy seguro de que otra animación funciona como un encanto en otra situación (no hay nada malo con ellos). Incluso uso que la misma transición al llamar a actividades externas, como la apertura de una ventana del navegador. La animación funciona. Sólo para mi Actividad B, no funciona.

Editar: aquí están las animaciones XML:

R.anim.activity_animation_right_to_left

 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="100%" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="0%" /> 

R.anim.animal_animal_de_actividad

 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0%" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="100%" /> 

R.anim.activity_animation_zoom_in

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="500" android:fillAfter="false" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:startOffset="0" android:toXScale="0.85" android:toYScale="0.85" /> </set> 

Finalmente lo arreglé. Revisé mi archivo de manifiesto y encontré que establecí el tema Theme.Translucent.NoTitleBar en cada actividad que Theme.Translucent.NoTitleBar . Una vez, he eliminado el tema de todos ellos, la animación funciona como un encanto. Sin embargo, no sé exactamente por qué este tema afecta a la animación.

Algunos ejemplos de animaciones pueden ayudar

Anim_left:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_longAnimTime" android:fromXDelta="-100%" android:fromYDelta="0" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="0" android:toYDelta="0" /> </set> 

Anim_right:

 <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_longAnimTime" android:fromXDelta="0" android:fromYDelta="0" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="100%" android:toYDelta="0" /> </set> 

Anim_back_left:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_longAnimTime" android:fromXDelta="0" android:fromYDelta="0" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="-100%" android:toYDelta="0" /> </set> 

Anim_back_right:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="@android:integer/config_longAnimTime" android:fromXDelta="100%" android:fromYDelta="0" android:interpolator="@android:anim/linear_interpolator" android:toXDelta="0" android:toYDelta="0" /> </set> 

Para fundido:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <alpha android:duration="2000" android:fromAlpha="0.0" android:toAlpha="1.0" > </alpha> </set> 

Fade_out:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <alpha android:duration="200" android:fromAlpha="1.0" android:toAlpha="0.0" > </alpha> </set> 

 <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true" android:anyDensity="true"> </supports-screens> 

(Intenta agregar esto a tu manifiesto)

  • ¿Intentaste agregar overridePendingTransition en onPause, onResume o onCreate?
  • ¿Activaste animaciones en tu móvil?
  • Probar otros dispositivos

He cambiado la animación zoom-in, zoom-out, y funciona bien en mi dispositivo (Nexus 4).

A-> B

 overridePendingTransition(R.anim.activity_animation_zoom_in, R.anim.activity_animation_right_to_left); 

B-> A

 overridePendingTransition(R.anim.activity_animation_left_to_right, R.anim.activity_animation_zoom_out); 

R.anim.activity_animation_zoom_in

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="500" android:fillAfter="false" android:fromXScale="0.5" android:fromYScale="0.5" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:startOffset="0" android:toXScale="1.0" android:toYScale="1.0" /> </set> 

R.anim.activity_animation_zoom_out

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="300" android:fillAfter="false" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:startOffset="0" android:toXScale="0.5" android:toYScale="0.5" /> </set> 

Use startActivityForResult .. y anule onActivityResult en Source Activity (Actividad A) y aplique la animación inversa (por ejemplo, de derecha a izquierda). Usa eso que estoy usando

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); overridePendingTransition(R.anim.transition_left_to_right, R.anim.transition_left_to_right_out); } 

Creo que el problema es que cuando vas de A a B, A va a fondo y sigue vivo, así que cuando regreses de B a A, overridePendingTransition no funcionará para A. Como se dice en la documentación sobre overridePendingTransition :

Llame inmediatamente después de uno de los sabores de startActivity (Intent) o finish () para especificar una animación de transición explícita que se realizará a continuación.

¿Podrías intentar por poner finish en A. al igual que lo hiciste en B cuando vienes de B a A, justo antes de overridePendingTransition , para asegurarse de que A es eliminado de modo que overridePendingTransition puede funcionar así:

Actividad A:

 /** Called when the user presses the Next soft button */ public void nextButtonOnClick(View view) { finish(); overridePendingTransition(R.anim.activity_animation_right_to_left, R.anim.activity_animation_zoom_in); Intent intent = this.getIntent(); intent.setClass(this, ActivityB.class); startActivity(intent); } 

Actividad B:

 /** Called when the user presses the Back soft button */ public void backButtonOnClick(View view) { onBackPressed(); } @Override /** Called when the user presses the Back hard button */ public void onBackPressed() { finish(); overridePendingTransition(R.anim.activity_animation_zoom_out, R.anim.activity_animation_left_to_right); Intent intent = this.getIntent(); intent.setClass(this, ActivityA.class); startActivity(intent); } 

Espero que esto te ayude.

  • ¿Hay algún tutorial de animación Android útil para principiantes?
  • ¿Puedo cambiar la animación de transición Android startActivity ()?
  • Android: No se puede obtener la transición de elementos compartidos para trabajar con Google Maps Fragment
  • OverridePendingTransition en SDK de Android no funciona
  • ¿Cómo puedo deshacerme de esta barra negra durante la animación?
  • Iniciar actividad con una animación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.