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 在回收视图时不尊重翻译的主要内容,如果未能解决你的问题,请参考以下文章