我有一个 RecyclerView
。回收站 View 的每个项目都可以展开或不展开。一次只能展开一项。
本质上,我正在尝试在 Lollipop 拨号器中重新创建历史列表。
我发现 using a LayoutTransition on RecyclerView makes it crash .
但我无法正确地为两种状态之间的项目 View 更改设置动画。
我已经尝试将 getItemAnimator().setSupportsChangeAnimations(true)
与 notifyItemChanged(getPosition())
结合使用,但有两个问题:
- View 被重新创建,使过渡变得非常奇怪,因为它在项目移动的同时淡入下一个项目上方。出现的新 View 没有调整大小,它已经是全尺寸了。
- 在重新创建 View 时,旧 View 淡出而新 View 淡入,这使得 View 背景颜色闪烁。
我还尝试在动画期间在项目 View 上设置 LayoutTransition
,但这种方法的问题是 RecycleView 的布局会立即更新并且不跟随动画。
我为这两次尝试都创建了一个小型演示项目。 The projects sources are here .
如何在项目布局更改时创建平滑过渡?
最佳答案
好的,所以我找到了一个不涉及调用 notifyItemChanged
的解决方案,因此不会替换 View 。缺点是您必须手动检查 View 一致性。为此,我创建了一个小型库,它可以完全满足我的需求,在 ViewHolder 中有 5 个位置。
诀窍是手动设置高度变化而不是使用 LayoutTransition。
关于android - RecyclerView : Animate item resize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446051/