OverridePendingTransition no funciona cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT

Tengo dos actividades en la pila, con el fin de mostrarles que uso FLAG_ACTIVITY_REORDER_TO_FRONT. Hasta ahora tan bueno, el problema viene cuando quiero llevar la actividad con una animación usando overridePendingTransition.

Intent i = new Intent(ActivityA.this, ActivityB.class); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); ActivityA.this.startActivity(i); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

La transición no se muestra, sin embargo, si el indicador no se agrega a la intención (eliminación de la línea 2), entonces no hay ningún problema.

¿Es posible llevar una actividad al frente con una animación?

¡Muchas gracias!

Me encontré con el mismo problema. El truco consiste en anular la transición en la devolución de llamada onResume ().

 @Override public void onResume() { super.onResume(); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); } 

En realidad la solución correcta cuando se utiliza REORDER_TO_FRONT es llamar a overridePendingTransition en el método onNewIntent () de la actividad que se va a abrir.

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

Reemplazar con sus transiciones.

Si necesita reemplazar selectivamente la transición, puede agregar un extra en su intento y comprobarlo en el onNewIntent () para decidir qué hacer.

Esto no es adecuado si no conoce la transición que se abrirá (si no lo especifica explícitamente, por ejemplo), pero de lo contrario es la solución correcta.

Vocación

 overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

después de finalizar(); De la actividad de cierre trabajado para mí.

 finish(); overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left); 

Es mejor que llamar aResume, ya que hace que la actividad sea más independiente sobre las animaciones de entrada y salida:

Llamada después de terminar la actividad del remitente:

Actividad A — Introduzca la transición 1 (en A) —> Actividad B — Introduzca la transición 2 (en B) —> Actividad C

Actividad A <— Salida Transición 1 (en B) — Actividad B <— Salida Transición 2 (en C) — Actividad C

Actividad A — Ingrese la transición 1 (en A) —> Actividad C — Ingrese la transición 3 (en C) —> Actividad B

Actividad A <— Salida Transición 3 (en C) — Actividad C <— Salida Transición 2 (en B) — Actividad B

Llamada onResume de la actividad del receptor:

Actividad A — Ingrese la transición 1 (en B) —> Actividad B — Ingrese la transición 2 (en C) —> Actividad C

Actividad A <— Introduzca la transición 1 (en A) — Actividad B <— Introduzca la transición 2 (en B) — Actividad C

Actividad A — Introducir transición 3 (en C) —> Actividad C — Introducir transición 2 (en B) —> Actividad B

Actividad A <— Ingrese Transición 1 (en A) — Actividad C <— Ingrese Transición 3 (en C) — Actividad B

Aquí la animación onResume siempre tiene que ser igual sin importar la actividad del remitente que es, en lugar de la primera aproximación, donde se puede personalizar la animación fácilmente.

Para mí, la solución era asegurarse de que se ejecutó en el hilo de la interfaz de usuario

 runOnUiThread(new Runnable() { public void run() { startActivity(new Intent(ActivityOne.this, ActivityTwo.class)); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } }); finish(); 

Mi colega se topó con este tema y logró solucionarlo agregando el atributo mínimo de SDK (5 y más) a él.

Ya que esta característica estaba disponible desde api 5, reforzar el uso de un nivel sdk más alto hizo el truco para nosotros.

¿Qué tal crear animación en el onCreate () o onStart () de la segunda actividad.

Tengo el mismo problema. Le sugiero que compruebe AndroidManifest.xml para asegurarse de que ActivityA y ActivityB no tienen conjunto Theme.Translucent.NoTitleBar , este tema contiene "android: windowIsTranslucent" = true causa el problema.

Espero que esto te ayude.

Hice algo similar e hice lo siguiente:

 private Stack<String> stack; ViewAnimator mViewAnimator; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewAnimator = new ViewAnimator(this); if (stack == null) stack = new Stack<String>(); push("FirstStackActivity", new Intent(this, FirstStackActivity.class)); } @Override public void finishFromChild(Activity child) { pop(); } @Override public void onBackPressed() { pop(); } public void push(String id, Intent intent) { Window window = getLocalActivityManager().startActivity(id, intent); if (window != null) { stack.push(id); View view = window.getDecorView(); mViewAnimator.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); mViewAnimator.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out)); mViewAnimator.addView(view); mViewAnimator.showNext(); setContentView(mViewAnimator); } } public void pop() { if (stack.size() == 1) finish(); if (stack.size() > 0) { LocalActivityManager manager = getLocalActivityManager(); Intent lastIntent = manager.getActivity(stack.peek()).getIntent(); Window newWindow = manager.startActivity(stack.peek(), lastIntent); View view = newWindow.getDecorView(); mViewAnimator.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in)); mViewAnimator.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out)); mViewAnimator.showPrevious(); mViewAnimator.removeView(view); } destroy(stack.pop()); } /** * BugFix official * @param id * @return */ public boolean destroy(String id) { final LocalActivityManager activityManager = getLocalActivityManager(); if (activityManager != null) { activityManager.destroyActivity(id, false); try { final Field mActivitiesField = LocalActivityManager.class.getDeclaredField("mActivities"); if (mActivitiesField != null) { mActivitiesField.setAccessible(true); @SuppressWarnings("unchecked") final Map<String, Object> mActivities = (Map<String, Object>) mActivitiesField.get(activityManager); if (mActivities != null) { mActivities.remove(id); } final Field mActivityArrayField = LocalActivityManager.class.getDeclaredField("mActivityArray"); if (mActivityArrayField != null) { mActivityArrayField.setAccessible(true); @SuppressWarnings("unchecked") final ArrayList<Object> mActivityArray = (ArrayList<Object>) mActivityArrayField.get(activityManager); if (mActivityArray != null) { for (Object record : mActivityArray) { final Field idField = record.getClass().getDeclaredField("id"); if (idField != null) { idField.setAccessible(true); final String _id = (String) idField.get(record); if (id.equals(_id)) { mActivityArray.remove(record); break; } } } } } } } catch (Exception e) { e.printStackTrace(); } return true; } return false; } 
  • ¿Hay una manera de llamar `overridePendingTransition` de una clase que no extiende la clase Activity?
  • Transición de animación entre actividades mediante FLAG_ACTIVITY_CLEAR_TOP
  • Transición de elemento compartido (primer plano / fondo)
  • Animación de transición de actividad de izquierda a derecha en Android
  • ¿Cómo desaparecer y entre dos imágenes?
  • Android elementos compartidos transición pre-21
  • Android: cómo animar una transición de actividad cuando se pulsa el botón de retroceso predeterminado
  • ¿Cómo puedo configurar el valor alfa de una vista completa en el nivel 7 de api (Android 2.1)
  • Cómo hacer la animación de marco suave en Android?
  • Android RecyclerView - animar la elevación del elemento al tocar
  • Desarrollador de Android se traslada a iOS - ¿Qué necesito saber?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.