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);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta