¿La transición reversa reversa del elemento del androide sobre detrás después de cambio de la orientación?

Para la transición de elementos compartidos estoy siguiendo este proyecto github. Tiene 2 pantallas – una con recyclerview teniendo número de tarjetas y segundo la pantalla de detalle. Como era de esperar, exhibe la transición de elementos compartidos de imageview y textview desde el elemento recyclerview a la pantalla de detalle y la transición inversa en la contrapresión.

Pero, si el usuario cambia la orientación en la pantalla de detalle y, a continuación, presiona el botón Atrás, la animación de transición inversa no funciona. Al mirar los fotogramas de este video entre 2:49 a 2:57 parece que es posible incluso después del cambio de orientación. ¿Alguna idea sobre esto?

Editar:

Por favor, compruebe este video para una mejor comprensión.

4 Solutions collect form web for “¿La transición reversa reversa del elemento del androide sobre detrás después de cambio de la orientación?”

Tienes que configurar:

requestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS); requestWindowFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); 

En la llamada y la actividad llamada (MainActivity + NextActivity en este ejemplo).

Supongo que abre NextActivity llamando a:

 ActivityOptions options = ActivityOptions. makeSceneTransitionAnimation(this, new Pair<View, String>(viewToAnimate, "animationName")); Intent intent = new Intent(MainActivity.this, NextActivity.class); startActivity(intent, options.toBundle()); 

En NextActivity debes agregar:

 animatingView.setTransitionName("animationName"); 

Si lo hace, la transición funcionará si pulsa el botón de retroceso.

PERO si usted gira el dispositivo y presiona el botón de la parte posterior él no trabajará.

Para solucionar este problema lo agregué en la primera actividad (MainActivity en este ejemplo):

 animatingView.setTransitionName("animationName"); 

El sistema ahora sabe qué animar después de una rotación de pantalla.

Por último, podría solucionar esto mediante la aplicación de tema independiente a la pantalla de detalle que sobrepasa el siguiente valor de atributo, pero no estoy seguro de por qué este parámetro cambiar el comportamiento de la animación.

 <item name="android:windowIsTranslucent">true</item> 

Me encontré con este mismo problema y esto cómo lo arreglé.

Cuando se hace clic en el elemento RecyclerView, paso la posición actual:

 @Override public void onItemClick(View sharedView, String transitionName, int position) { viewPosition = position; Intent intent = new Intent(this, TransitionActivity.class); intent.putExtra("transition", transitionName); ActivityOptionsCompat options = ActivityOptionsCompat. makeSceneTransitionAnimation(this, sharedView, transitionName); ActivityCompat.startActivity(this, intent, options.toBundle()); } 

Lo guardo en onSaveInstanceState para persistir en los cambios de configuración:

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(VIEW_POSITION, viewPosition); } 

Luego, en el método onCreate:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Workaround for orientation change issue if (savedInstanceState != null) { viewPosition = savedInstanceState.getInt(VIEW_POSITION); } setExitSharedElementCallback(new SharedElementCallback() { @Override public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { super.onMapSharedElements(names, sharedElements); if (sharedElements.isEmpty()) { View view = recyclerView.getLayoutManager().findViewByPosition(viewPosition); if (view != null) { sharedElements.put(names.get(0), view); } } } }); } 

Causa del problema: el mapa de sharedElements estaba vacío (no sé por qué) después del cambio de orientación.

Si entras en "Opciones para desarrolladores" y habilitas "No mantener actividades", creo que encontrarás que el problema también ocurrirá. En otras palabras, el problema no es que esté girando el dispositivo … sino más generalmente que la primera actividad está siendo destruida mientras está en el fondo.

En cuanto a su código de ejemplo, parece que está haciendo algunas cosas extrañas con un adaptador (es decir, la alimentación del reciclador ver nuevos elementos de la cuadrícula cada 50ms de un hilo de fondo)? Puedo ver por qué eso podría causar algunos problemas para usted … por ejemplo, ¿qué sucede si la actividad de llamada se destruye y necesita ser recreada inmediatamente después de que el usuario haga clic en el botón Atrás y comienza la transición de retorno? Si la transición de retorno del elemento compartido comienza y el elemento compartido deseado aún no existe en la primera actividad (por ejemplo, porque aún no ha sido agregado por el adaptador), la transición no funcionará correctamente.

Creo que esto probablemente debería ser suficiente información para empezar a resolver el problema.

  • ¿Cómo puedo añadir un RecyclerView horizontal dentro de un elemento de lista
  • Android 5.0 (Lollipop) CheckedTextView presione destacar problemas
  • Android Visualización de datos de json a cardview en RecyclerView
  • Cómo hacer la vista de mensaje roscado con enviar y recibir mensajes en dos lados con la vista de reciclador
  • Android Recyclerview GridLayoutManager espaciamiento de columnas
  • Uso de la vista de reciclaje con una base de datos
  • Android studio: gradle error de dependencia
  • Recyclerview addOnItemTouchListener obtiene la vista previa que se hace clic en la fila
  • Agregar los efectos de un RippleDrawable y un StateListDrawable a un RecyclerView
  • Centrar un CardView en un RecyclerView con un solo elemento
  • ¿Cómo crear RecyclerView con múltiples tipos de vista?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.