2011-04-14 11 views
21

Tengo varias actividades diferentes en mi aplicación y no quiero ninguna animación de transición cuando cambio de Actividades. A continuación se muestra cómo estoy cambiando entre las actividades:Android - Cómo detener la animación entre los cambios de actividad

Intent i = new Intent(FirstActivity.this, SecondActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
      startActivity(i); 

Esto funciona muy bien la primera vez que comienzo una nueva actividad. No hay animación, pero cuando regreso a una Actividad que ya comenzó, parece que se ignora "Intent.FLAG_ACTIVITY_NO_ANIMATION" y se produce la animación predeterminada.

Parece que no puedo entender por qué sucede esto.

Respuesta

38
+5

No, no había intentado 'overridePendingTransition (0,0)'. Lo usé en cada Actividades onResume() y onPause(). Funcionó perfecto. Gracias! – KevinM

+0

Me ayudó en mi Nexus 7 pero no en mi SGS4. ¿Hay alguna otra forma de arreglar esto? Gracias. –

+0

@ oleg.semen: pruebe el enfoque del tema desde [otra respuesta sobre esta pregunta] (http://stackoverflow.com/a/18973007/115145). – CommonsWare

3

Necesitaba esto ya que tuve que crear actividades al hacer clic en los menús.

hice lo siguiente:

que añade la bandera FLAG_ACTIVITY_NO_ANIMATION a la intención. Detuvo las animaciones al crear la actividad por primera vez.

Sin embargo, las actividades en la pila que fueron llamadas cuando hicimos clic en el mismo menú otra vez (probablemente de una actividad diferente), tenía la animación.

Así que agregué FLAG_ACTIVITY_NO_HISTORY para borrar o más bien finalizar la actividad cuando comienza una nueva actividad. Esto causó la creación de una actividad nueva (sin animación) cuando hago clic en el menú una vez más.

+0

¿Pero no es esta corrección incorrecta de "no hacer animación", al tiempo que permite que la actividad se siga creando? – Miguel

+0

Creo que traer la actividad de la pila trasera sin animación, podría ser la mejor solución posible. –

13

Puede establecer FLAG_ACTIVITY_REORDER_TO_FRONT por código y FLAG_ACTIVITY_NO_ANIMATION en el manifiesto de la siguiente manera:

Crear noAnimTheme en res/valores/styles.xml

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

o

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

y utilizarlo en manifiesto:

<activity android:name="SecondActivity" android:theme="@style/noAnimTheme"/> 

espero que ayude

3

añadir esto después de la creación de la segunda intención

 Intent i = new Intent(SecondActivity.this, FirstActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
     i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(i); 

cuando regrese a la primera intención, la animación está desactivada, trabajado para mí, sin embargo

0

Si está utilizando FLAG_ACTIVITY_REORDER_TO_FRONT entonces también puede anular onNewIntent para posteriores llamadas startActivity. Esto solo funcionará para llevar a los estados frontales en lugar de la primera llamada.

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    overridePendingTransition(R.anim.whatever, R.anim.whatever); 
} 

Claro, debe implementar esto en la actividad objetivo.

Cuestiones relacionadas