基本上网上给出的解决问题方案为:
-
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE)
-
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); manager.invalidateSpanAssignments(); //防止第一行到顶部有空白区域 } });
以上代码给LayoutManager和Recycleview设置之后的确可以解决部分问题,但是依然存在着顶部item留白错乱的问题,虽然在onScrollStateChanged中动态的去重新计算了高度 但是效果依然不尽人意。
其实在调用invalidateSpanAssignments的同时就决定了,只要是触摸滑动那么页面会进行重新测量绘制,因此导致在回到顶部 或者 滑动过程中依然有item的位置会变化 顶部有留白因此该方法不能调用
有人提出, 用IntentService中来写代码块,使用第三方图片加载框架例如Glide的asBitmap来预先获取图片的Bitmap同时将宽高保存赋予实体类,这种情况在后台不提供图片的宽高时,只有使用该方法,但是该方法的效率较