RecyclerView 在回收视图时不考虑翻译。

8

我正在使用RecyclerView,遇到以下问题。当RecyclerViewLinearLayoutManager决定视图是否已经超出屏幕(以便进行回收利用)时,它不考虑视图的translationY

因此,当我向上滚动并且我有带有正translationY的视图时,LinearLayoutManager认为视图已经超出屏幕,但实际上它仍然可见(因为它被向下转换了)。

我注意到LinearLayoutManager做出这个决定的方式是查看getDecoratedBottom(View),所以我尝试覆盖getDecoratedBottom(View)以包括翻译。不幸的是,它会完全搞乱布局-这种方法在我们布局新项时也会使用,因此新项会获得额外的平移(在现有平移的基础上)。

有没有简单的方法可以告诉LinearLayoutManager在不重新实现LayoutManager的情况下查看翻译属性来决定回收视图?


你找到这个问题的解决方案了吗? - Zakharov Roman
@ZakharovRoman 是的...我分叉了LinearLayoutManager实现,并稍微修改了它的逻辑以包括翻译。但是没有什么“开箱即用”的东西可以真正解决这个问题。 - Pavel Dudka
好的,我会尝试。谢谢。 - Zakharov Roman
1个回答

0

也许对某些人有帮助,我找到了一个解决方案。

首先,我尝试使用Translate动画,但没有成功。 然后,我创建了一个继承ItemDecoration的新类。然后重写了getItemOffsets()并在Rect上设置了适当的偏移量。LayoutManager成功地计算了这些偏移量。实现的结果如附图所示。


好的,不确定它是否适用于我的情况,因为我在每个帧上都更改翻译。不太清楚经常更改装饰偏移量的影响。 - Pavel Dudka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接