RecyclerView:Animate项目调整大小

Sal*_*RYS 19 android layouttransition android-recyclerview

我有一个RecyclerView.回收者视图的每个项目都可以扩展或不扩展.只能同时扩展一个项目.

本质上,我正在尝试在lolipop dialier中重新创建历史列表.

我发现在RecyclerView上使用LayoutTransition 使它崩溃.

但我无法正确设置两个状态之间项目视图更改的动画.

我曾尝试getItemAnimator().setSupportsChangeAnimations(true)过,notifyItemChanged(getPosition())但有两个问题:

  • 视图被重新创建,使得过渡非常奇怪,因为它在项目移动的同时在下一个项目上方淡入.出现的新视图不是调整大小,它已经是完整大小.
  • 当视图重新创建时,旧视图淡出而新视图淡入,这使视图背景颜色闪烁.

我还尝试LayoutTransition在动画的持续时间内设置项目视图,但这种方法的问题是RecycleView的布局立即更新而不跟随动画.

我为这两个尝试创建了一个关于这个问题的小型演示项目. 项目来源在这里.

如何在项目布局更改中创建平滑过渡?

Sal*_*RYS 11

好的,所以我找到了一个不涉及调用的解决方案,notifyItemChanged因此不会替换视图.con是你必须手动检查视图的一致性.为此,我创建了一个小型库,它允许我正在查找的内容,适用于ViewHolder中的5个loc.

诀窍是手动设置高度变化,而不是使用LayoutTransition.

演示项目可以在这里找到.

  • 我不这么认为,但是对不起,如果您感到我以任何形式抢劫了您。此解决方案不使用notifyDataSetChanged,而是“手动”管理单元状态,从而防止“单元交换”。此外,我将其作为答案而不是评论,因为我正在提供一个演示项目来说明如何执行此操作。请在此处将您的答案与演示项目一起发布,我很乐意将您归为答案:) (2认同)