繁体   English   中英

RecyclerView:Animate项目调整大小

[英]RecyclerView: Animate item resize

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

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

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

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

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

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

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

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

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

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

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

演示项目可以在这里找到

您应该只使用notifyItemChanged(getPosition(), new Object())

在您的适配器中,覆盖onBindViewHolder(GigExtraViewHolder holder, int position, List<Object> payloads) ,如果有效负载为null或为空,请执行原始绑定逻辑,否则,只需执行自己的展开/折叠动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM