volver studio retroceso retroceder regresar deshabilitar boton atras anterior activity android animation button transition back

retroceso - retroceder android studio



Android: cómo animar una transición de actividad cuando se presiona el botón de retroceso predeterminado (4)

En mi actividad, tengo un botón con el siguiente oyente de clic que funciona muy bien:

final ImageButton startOverButton = (ImageButton) findViewById(R.id.start_over_button); startOverButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(final View v) { finish();//go back to the previous Activity overridePendingTransition(R.anim.comming_in, R.anim.comming_out); } });

Anime el regreso a la actividad anterior de la manera que quiero. Sin embargo, cuando el usuario presiona el botón Atrás predeterminado de Android, la animación no se activa. Mi pregunta es: ¿dónde debería colocar el código de animación para reemplazar TransiciónPend (R.anim.comming_in, R.anim.comming_out); para que esta animación se active cuando el usuario hace clic en mi botón y en el botón predeterminado de Android?

Como intento ingenuo, he intentado poner la anulación de Transición rápida (R.anim.comming_in, R.anim.comming_out); línea de código en el método onDestroy () pero no funcionó.

¡Gracias de antemano!


Aunque sobrescribir onBackPressed() es una buena opción, sugeriría anular el método finish() , en caso de que la actividad se termine de otra manera, como una acción de navegación o cualquier otra acción de vista que "destruya" la actividad:

@Override public void finish() { super.finish(); overridePendingTransition(0,0); }

Necesitamos tener en cuenta que este método se activará después de presionar el botón Atrás, así que estamos listos para ir :-)

Actualización : Además, anular onBackPressed() podría estropear la Actividad si estamos usando fragmentos, porque probablemente no queremos anular las transiciones cada vez que presionamos la parte de atrás.


Básicamente anular onBackPressed es un enfoque adecuado, pero en lugar de llamar a finish (), diría que es mejor llamar a super.onBackPressed () y luego agregar overridePendingTransition para que seamos un poco más consistentes con las reglas de herencia.

@Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.comming_in, R.anim.comming_out); }


si usas fragmentos puedes proceder de esta manera:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left, R.anim.anim_slide_out_right, R.anim.anim_slide_in_right); transaction.replace(R.id.fragment_container, new YourClassFragment); transaction.addToBackStack(null); transaction.commit();

anim_slide_in_left

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

anim_slide_out_left

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

anim_slide_out_right

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

anim_slide_in_right

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


tal vez puedas hacer este trabajo en el método onBackPressed () en la actividad.

@Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.comming_in, R.anim.comming_out); }