Вопрос решается переопределением RecyclerView.ItemDecoration.
В адаптере мы меняем свойство элемента по клику и вызываем notifyItemChanged для кликаемой карты и ее соседа.
Затем мы присоединяем Decorator к RecylceView (перед назначением адаптера).
gridView = findViewById(R.id.gridview_words_titles);
gridView.addItemDecoration(new OverlapDecoration());
И после этого внутри класса OverlapDecoration мы можем вносить все изменения, которые нам нужны, чтобы перекрывать карты.
В моем случае, я просто расширяю прямоугольник, зависит от того, правый он или левый в паре.
View layout = view.findViewById(R.id.layout_words_full);
ViewGroup.LayoutParams params = layout.getLayoutParams();
params.width = (int) (width_px - 15 * scale);
А,
int horizOverlap;
if (itemPosition % 2 == 0) {
horizOverlap = (int) ((width_px - 20 * scale) / 2);
outRect.set(-horizOverlap, 0, 0, 0);
} else {
horizOverlap = (int) ((width_px - 5 * scale) / 2);
outRect.set(0, 0, -horizOverlap, 0);
}