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?

One Solution collect form web for “Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles”

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

  • ¿Cómo puedo configurar el valor alfa de una vista completa en el nivel 7 de api (Android 2.1)
  • OverridePendingTransition no funciona cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT
  • Desarrollador de Android se traslada a iOS - ¿Qué necesito saber?
  • Animación de transición de actividad de izquierda a derecha en Android
  • Error de Android en la transición de la actividad
  • Android elementos compartidos transición pre-21
  • Android: ¿No hay transición entre las actividades?
  • Cómo hacer la animación de marco suave en Android?
  • La transición de Android no funciona en el teléfono
  • ¿Cómo desaparecer y entre dos imágenes?
  • ¿Hay una manera de llamar `overridePendingTransition` de una clase que no extiende la clase Activity?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.