RecyclerView 在回收视图时不尊重翻译

Posted

技术标签:

【中文标题】RecyclerView 在回收视图时不尊重翻译【英文标题】:RecyclerView doesn't respect translation when recycling views 【发布时间】:2015-08-29 02:28:48 【问题描述】:

我现在在玩RecyclerView,偶然发现了以下问题。当 RecyclerView 的 LinearLayoutManager 决定视图是否离开屏幕(因此它可以成为回收器)时,它不会考虑视图的 translationY

所以本质上,当我向上滚动并看到带有正面 translationY 的视图时,LinearLayoutManager 认为该视图不在屏幕上,但实际上它仍然可见(因为它被向下翻译了)。

我注意到LinearLayoutManager 做出此决定的方式是查看getDecoratedBottom(View),因此我尝试覆盖getDecoratedBottom(View) 以包括翻译。不幸的是,它完全打乱了布局——当我们布局新项目时也会使用这种方法,因此新项目会得到额外的翻译(在现有项目之上)..

有没有简单的方法告诉LinearLayoutManager 在决定回收视图而不从头开始重新实现LayoutManager 时查看translation 属性?

【问题讨论】:

您找到解决问题的方法了吗? @ZakharovRoman 是的......分叉了 LinearLayoutManager 实现并稍微修改了它的逻辑以包括翻译。但没有什么“开箱即用”可以真正解决这个问题。 好的,我会试试的。谢谢 【参考方案1】:

可能对某人有帮助,我找到了解决方案。

首先我尝试使用翻译动画,但没有成功。 但是,我刚刚创建了一个扩展ItemDecoration 的新类。然后覆盖 getItemOffsets() 并在 Rect 上设置适当的偏移量。 LayoutManager 成功计算了这个偏移量。获得的结果在附加的图像上。

【讨论】:

好吧,我不确定它是否适用于我的情况,因为我正在更改每一帧的翻译。真的不知道经常改变装饰偏移的含义。

以上是关于RecyclerView 在回收视图时不尊重翻译的主要内容,如果未能解决你的问题,请参考以下文章

在RecyclerView项目中替换片段

回收站视图点击动画

回收站视图 - 在空对象引用上

Android之RecyclerView入门

使用标题单元格时不尊重 UICollectionView sectionInsets

线性布局未显示在回收站视图下方