I am dealing with the same problem as you, and so far I have not found a good solution.
Just changing the column number in the GridLayoutManager seems strange, so at the moment I'm using animation to fade out / the whole layout. Something like that:
private void animateRecyclerLayoutChange(final int layoutSpanCount) { Animation fadeOut = new AlphaAnimation(1, 0); fadeOut.setInterpolator(new DecelerateInterpolator()); fadeOut.setDuration(400); fadeOut.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { productsRecyclerLayoutManager.setSpanCount(layoutSpanCount); productsRecyclerLayoutManager.requestLayout(); Animation fadeIn = new AlphaAnimation(0, 1); fadeIn.setInterpolator(new AccelerateInterpolator()); fadeIn.setDuration(400); productsRecycler.startAnimation(fadeIn); } }); productsRecycler.startAnimation(fadeOut); }
If you combine burnout / animation with the scaling of each visible element, this will be a decent animation for the changes of the GridLayoutManager.
source share