Cómo redistribuir elementos en un RecyclerView con StaggeredGridLayoutManager
Estoy jugando con el StaggeredGridLayoutManager y tengo algo parecido a lo que quiero. Tengo una cuadrícula escalonada horizontal con 2 filas, donde algunos elementos tienen la altura de 1 fila, y otros abarcan ambas filas. Quiero que los elementos de altura de fila única se apilen y pensé que podría lograrse estableciendo la estrategia de brecha en GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS, pero esto no parece funcionar.
Actual:
___ ___ ___ ___ |___| | | |___| | | | | | | |___| |___|
Lo que quiero:
___ ___ ___ |___| | | | | ___ | | | | |___| |___| |___|
Los fragmentos de código relevantes:
Configuración del administrador de diseño para la vista del reciclador:
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(layoutManager);
Aquí está el onBindViewHolder para mi adaptador personalizado (este es solo un ejemplo simplificado). Básicamente tengo un ImageView dentro de un CardView (el CardView está configurado en wrap_content para altura y ancho).
if(position%3==0) {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 75, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(false);
}
else {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(true);
}