Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles

Tengo 2 fragmentos: el fragmento 1 que contiene el recyclerview y el fragmento 2 que tienen la visión detallada para el artículo seleccionado. Hay un elemento compartido imageview entre estos 2 fragmentos. Durante la transición del fragmento 1 a 2, quiero ver el efecto de transición de elemento compartido estándar, pero no parece funcionar con recyclerview. Porque si utilizo sólo otra vista separada en el primer fragmento en lugar de la vista de reciclaje, muestra una transición adecuada. Tenga en cuenta que he asignado nombres de transición únicos basados ​​en la posición a las imágenes de elementos de recyclerview.

El código es el siguiente: MyActivity.java

public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); if (savedInstanceState == null) { getFragmentManager().beginTransaction() .add(R.id.main_container, new PlaceholderFragment()) .commit(); } } public static class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> { public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mItemClickListener; List<Integer> items = new ArrayList<Integer>(); public void setOnItemClickListener(OnItemClickListener listener) { this.mItemClickListener = listener; } public ImageAdapter() { items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); items.add(1); } @Override public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, null); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, final int i) { viewHolder.container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mItemClickListener != null) { mItemClickListener.onItemClick(view, i); } } }); viewHolder.imgDummy.setTransitionName("test" + i); } @Override public int getItemCount() { return items.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public View container; public View imgDummy; public ViewHolder(View itemView) { super(itemView); container = itemView.findViewById(R.id.container); imgDummy = itemView.findViewById(R.id.imgDummy); } } } /** * A placeholder fragment containing a simple view. */ @SuppressLint("ValidFragment") public class PlaceholderFragment extends Fragment { private RelativeLayout.LayoutParams lp; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_my, container, false); final View imgDummy2 = rootView.findViewById(R.id.imgDummy2); imgDummy2.setTransitionName("test"); RecyclerView list = (RecyclerView) rootView.findViewById(R.id.streams_list); list.setLayoutManager(new LinearLayoutManager(getActivity())); ImageAdapter adapter = new ImageAdapter(); adapter.setOnItemClickListener(new ImageAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { View imgDummy = view.findViewById(R.id.imgDummy); SecondFragment secondFragment = new SecondFragment(); secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.trans_move)); secondFragment.setId(imgDummy.getTransitionName()); android.app.FragmentTransaction trans = getFragmentManager().beginTransaction(); trans.replace(R.id.main_container, secondFragment); trans.addToBackStack(null); trans.addSharedElement(imgDummy, imgDummy.getTransitionName()); trans.commit(); } }); list.setAdapter(adapter); return rootView; } } public static class SecondFragment extends Fragment { private String mId; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.second_fragment, container, false); rootView.findViewById(R.id.imgDummy).setTransitionName(mId); return rootView; } public void setId(String id) { mId = id; } } } 

Si cambio después de 2 líneas:

 secondFragment.setId(imgDummy.getTransitionName()); trans.addSharedElement(imgDummy, imgDummy.getTransitionName()); 

por

 secondFragment.setId(imgDummy2.getTransitionName()); trans.addSharedElement(imgDummy2, imgDummy2.getTransitionName()); 

Entonces puedo ver imgDummy2 imagen de transición correctamente, probablemente ya que está fuera de recyclerview.

¿Alguna idea de cómo puedo aplicar lo mismo dentro de recyclerview también?

Sé que es tarde. Pero estaba luchando con esto y finalmente consiguió la animación de transición desde la vista del reciclador en el fragmento A al fragmento B trabajando.

Intente cambiar imgDummy.getTransitionName ()) en la línea inferior

  trans.addSharedElement(imgDummy, imgDummy.getTransitionName()); 

Al nombre de transición del ImageView en el fragmentoB

  • OverridePendingTransition no funciona cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT
  • ¿Hay una manera de llamar `overridePendingTransition` de una clase que no extiende la clase Activity?
  • OverridePendingTransition en el adaptador gridview
  • Error de Android en la transición de la actividad
  • La transición de Android no funciona en el teléfono
  • Cómo hacer la animación de marco suave en Android?
  • Efectos de transición con Android ImageView
  • Android Google IO 2014: ¿Cómo implementar la transición de la actividad con fragmentos?
  • Transición de animación entre actividades mediante FLAG_ACTIVITY_CLEAR_TOP
  • Android NYTimes Swipe Animation / Gesto
  • Transición de elemento compartido (primer plano / fondo)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.