Transición personalizada de elementos compartidos en la actividad final

Tengo una lista de datos de feed en la aplicación global. He utilizado este código para hacer una transición de mi RecyclerView en MainAcitivty

 // selected item event Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("item_feed_index", selectedItemIndex); FeedViewHolder viewHolder = getViewHolderFromPosition(position); Pair<View, String> pair1 = Pair.create(viewHolder.imageView, "TransitionName.Feed.Image"); Pair<View, String> pair2 = Pair.create(viewHolder.textView, "TransitionName.Feed.Text"); Pair<View, String> pair3 = Pair.create(viewHolder.button, "TransitionName.Feed.Button"); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); startActivity(intent, options.toBundle()); 

Funciona. Pero el problema es que en DetailActivity , tengo otra lista vertical, que el usuario puede desplazarse hacia abajo / arriba para cambiar el elemento Feed en la lista (que cambia el índice de desplazamiento también).

Cuando presione de regreso de DetailActivity , quiero que la transición de animación de salida se ejecute en el índice de alimentación de visualización correcto. ¿Cómo puedo hacer eso?

Este es el código onActivityResult en MainActivity , desplaza el reciclo a la posición correcta, pero la animación de transición de salida no es la posición correcta.

 int currentFeedIndex = Application.getInstance().getCurrentViewingFeed(); if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) { if (gridLayoutManager != null) { gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0); } } 

Estoy buscando la manera de cambiar la lista de parejas antes de ejecutar la animación de salida

Actualización : aquí está el diseño de DetailActivity, donde asigno nombres de transición a vistas

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imgFeed" android:layout_width="match_parent" android:layout_height="match_parent" android:transitionName="TransitionName.Feed.Image" /> <TextView android:id="@+id/tvLogo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:transitionName="TransitionName.Feed.Text"/> <Button android:transitionName="TransitionName.Feed.Button" android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:layout_below="@+id/tvLogo"/> </RelativeLayout> 

Actividad de la persona que llama:

 String itemId; //set your item id here Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("item_feed_index", selectedItemIndex); intent.putExtra("item_id", itemId); String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; String textViewTransitionName = "TransitionName.Feed.Text." + itemId; String buttonTransitionName = "TransitionName.Feed.Button." + itemId; ViewCompat.setTransitionName(viewHolder.imageView, imageViewTransitionName); ViewCompat.setTransitionName(viewHolder.textView, textViewTransitionName); ViewCompat.setTransitionName(viewHolder.button, buttonTransitionName); Pair<View, String> pair1 = Pair.create(viewHolder.imageView, imageViewTransitionName); Pair<View, String> pair2 = Pair.create(viewHolder.textView, textViewTransitionName); Pair<View, String> pair3 = Pair.create(viewHolder.button, buttonTransitionName); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3); startActivity(intent, options.toBundle()); 

A continuación, en su Activity destino sólo necesita obtener itemId de Intent y establecer el nombre de transición correcto para cada vista.

 String itemId = getIntent().getString("item_id"); String imageViewTransitionName = "TransitionName.Feed.Image." + itemId; String textViewTransitionName = "TransitionName.Feed.Text." + itemId; String buttonTransitionName = "TransitionName.Feed.Button." + itemId; ViewCompat.setTransitionName(findViewById(R.id.imageView), imageViewTransitionName); ViewCompat.setTransitionName(findViewById(R.id.textView), textViewTransitionName); ViewCompat.setTransitionName(findViewById(R.id.button), buttonTransitionName); 

onBackPressed método onBackPressed en su DetailActivity de la siguiente manera:

 @Override public void onBackPressed() { supportFinishAfterTransition(); super.onBackPressed(); } 

Además, asegúrese de haber especificado la transición de salida en sus styles.xml

  • No se puede ocultar la barra de herramientas cuando recyclerview se desplaza utilizando el diseño del coordinador
  • RecyclerView onclick se activa antes de que la animación del clic se complete
  • RecyclerView eliminar el bug de animación
  • La vista en RecyclerView no coincide con el ancho de los padres
  • Detener elementos de moverse cuando se utiliza StaggeredGridLayoutManager
  • Vista de Google Maps dentro de un RecyclerView
  • El rollo no funciona correctamente para RecyclerView dentro de CoordinatorLayout
  • RecyclerView dentro de CoordinatorLayout, AppBarLayout Asunto de desplazamiento
  • Persistente hoja inferior con vista recicladora
  • Definición de onclickListener de RecyclerView en una actividad
  • Lista de desplazamiento vertical y horizontal o cuadrícula en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.