最近我开始为自定义滚动工作,RecyclerView
但遇到了一个问题。我做了标题视差,效果很好,但是当你滚动时我想让行扩展。对于这种方法,我需要使用recyclerView.computeVerticalScrollOffset()
它来处理列表中的前两项,但随后它就分崩离析了。
这是我的代码示例:
FrameLayout main = (FrameLayout) holder.itemView;
if (main != null) {
int height = calculateHeight(offset, (position + i));
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) main.getLayoutParams();
lp.height = height;
main.setLayoutParams(lp);
}
所以我有一个函数可以根据布局中的位置和recyclerview的偏移量计算高度。当第二个项目到达Y == 0
偏移量下降一半(即从1200下降到600然后它继续但计算都是错误的)
关于如何获得稳定的偏移值或如何用与 recyclerView 位置一致的东西来改变它的任何想法。
编辑:
好的,我可以逐步描述问题:
- 适配器位置(0)处的元素高度为 1200
- 所有其他元素的默认高度为 300
- 当用户开始向下滚动时,位置(1)处的元素开始从 300 扩展到 1200 高度
--------- 这是代码开始破解的地方...... ------------
- 当位置(1)处的元素新高度为 1200 到达屏幕顶部时(此时
getTop() == 0
),此处的偏移量约为 900。 - 当同一个元素开始离开屏幕(用户向下滚动)时,顶部屏幕和该元素碰撞(0,0)处的偏移量减少了一半,因此偏移量现在是 450,而应该是 900,然后它从 450 开始,但我在位置(1)的元素现在只有它应该大小的一半......