¿Deshabilitar la animación deslizable de actividad al iniciar una nueva actividad?


140

Tengo una actividad que inicia otra actividad, a través de un clic en el botón. De forma predeterminada, en las versiones más recientes del sistema operativo de Android, el sistema operativo animará la nueva actividad deslizándose de derecha a izquierda.

¿Hay alguna manera de deshabilitar esta animación? Solo quiero que la nueva actividad aparezca sin ningún tipo de animación.

Respuestas:


190

La FLAG_ACTIVITY_NO_ANIMATIONbandera funciona bien para deshabilitar la animación al iniciar actividades.

Para deshabilitar la animación similar que se activa cuando se llama finish()a una Actividad, es decir, la animación se desliza de derecha a izquierda, puede llamar overridePendingTransition(0, 0)después de llamar finish()y se excluirá la siguiente animación.

Esto también funciona en la animación si llama overridePendingTransition(0, 0)después de llamar startActivity(...).


9
Tenga en cuenta que FLAG_ACTIVITY_NO_ANIMATIONy overridePendingTransitionson API Level 5+ solamente.
azdev

Esto no ayuda al regresar de una actividad con la tecla Atrás presionada.
Yar

44
Eress el mejor. overridePendingTransition (0, 0) -> es divino. Solo anula la animación de finalización (), pero no la animación que se activa al reanudar la actividad anterior.
Philipp Jahoda

1
No me gusta esta respuesta porque no cubre las transiciones causadas al presionar las teclas programables 'atrás'. OP pregunta cómo 'deshabilitar' la animación, no 'decirle selectivamente a la aplicación que no la reproduzca'
1owk3y

3
Si desea deshabilitar o anular también la animación "atrás", anule el método finish () en su actividad y ponga esa llamada allí junto con una llamada a super.finish (). Problema resuelto.
Grishka

171

En mi humilde opinión, esta respuesta aquí resuelve el problema de la manera más elegante.

El desarrollador debe crear un estilo ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

luego, en manifiesto, configúrelo como tema para la actividad o la aplicación completa.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Voila! Bonito y fácil..

ps créditos al autor original por favor ...


1
No funciona para Back, y cambia el aspecto de la barra de título (lo hace pequeño) ...
Marek

son u u seguro no añadieron algunas otras propiedades en el estilo, motivo de que nadie más ha informado este "efecto" u mencionan ..
Ewoks

Solo como referencia, esto puede causar un problema en una jerarquía de vistas donde necesita requestWindowFeature ().
Martin Marconcini

sería bueno si elaboras un poco, así evitamos posibles problemas
Ewoks

44
@Marek Supongo que su problema no es cambiar el padre = "android: Theme" correctamente. Debe cambiarlo con el tema que desea usar, básicamente este código simplemente deshabilita la animación específica en un tema. por ejemplo, use "Theme.AppCompat.Light.NoActionBar" en lugar de "android: Theme", y obtendrá lo que quiero decir. Espero que ayude.
Recomer

33

Aplicar

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

luego

overridePendingTransition(0, 0);

Esto detendrá la animación.


28

En mi opinión, la mejor respuesta es usar "overridePendingTransition(0, 0);"

para no ver la animación cuando se quiere Intenta un Activityuso:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

y no ver la animación cuando presionas el botón de retroceso onPauseMétodo de anulación en tunewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

Esto funciona para mí al deshabilitar Finalizar animación de actividad.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

Estoy en 4.4.2, y llamar a overridePendingTransition (0, 0) en onCreate () de la actividad de lanzamiento deshabilitará la animación de inicio (llamar a overridePendingTransition (0, 0) inmediatamente después de startActivity () NO funcionó). Como se señaló en otra respuesta, llamar a overridePendingTransition (0, 0) después de terminar () deshabilita la animación de cierre.

Por cierto, descubrí que configurar el estilo con "android: windowAnimationStyle"> @ null (otra respuesta mencionada aquí) causó un bloqueo cuando mi actividad de lanzamiento intentó establecer el título de la barra de acción. Después de depurar, descubrí que de alguna manera esto causa que window.hasFeature (Window.FEATURE_ACTION_BAR) falle en initActionBar () de la Actividad.


1
¿Qué hay de onresume? actividades principales individuales y todo eso.
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATION puede funcionar, pero no estaba haciendo el truco para mí cuando se combina con FLAG_ACTIVITY_CLEAR_TASK y FLAG_ACTIVITY_NEW_TASK. Aparentemente estoy viendo la animación para crear una nueva tarea con una nueva pila de actividades mientras navego lateralmente a mis otras vistas de nivel superior.

Lo que funcionó aquí fue llamar "overridePendingTransition (0, 0);" ya sea inmediatamente después de mi llamada startActivity () o onPause (). Ambas formas funcionaron, pero hacerlo después de startActivity () me da un poco más de control sobre cuándo quiero animaciones y cuándo no.


2

Tuve un problema similar al hacer que apareciera una pantalla negra en la transición deslizante de una actividad a otra usando overridependingtransition. y seguí el camino de abajo y funcionó

1) creó una noanim.xmlcarpeta en anim

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

y usado

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

El primer parámetro como mi animación original y el segundo parámetro que es la animación de salida como mi animación ficticia


1

Con el fin de evitar el fondo negro cuando se inicia una actividad ya en la pila, añadí overridePendingTransition(0,0)en onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.