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:
- Problema con el TransitionDrawable
- transición personalizada entre las actividades de android
- Cambiar la transición de navegación igual que Volver o Cerrar
- No hay animación para Android al pasar de una actividad de retrato a una actividad de paisaje
- ¿Cómo hacer la transición de la aplicación de Youtube en la búsqueda?
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>
- TransitionDrawable completado
- Android hace la transición en la actividad recreate ()
- OverridePendingTransition de Android y singleInstance
- OverridePendingTransition no funciona
- Transición de la actividad en Android
- OverridePendingTransition para actividades deslizantes dentro y fuera suavemente
- La pantalla parpadea al azar cuando se utiliza overridePendingTransition en Jelly Bean
- Cómo deshabilitar la animación de diapositivas barra de navegación cuando va a pantalla completa?
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.