¿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.

usuario246114
fuente

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

Mattias
fuente
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 ...

Ewoks
fuente
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.

Siddharth_Vyas
fuente
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);
}
Sasa
fuente
19

Solo especifique la Intent.FLAG_ACTIVITY_NO_ANIMATIONbandera al comenzar

Alexander Kosenkov
fuente
13

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

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
cmcromance
fuente
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.

Steve B
fuente
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.

Wookie
fuente
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

Karthika PB
fuente
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();

}
Alex Huiculescu
fuente