android - RecyclerView : Animate item resize

标签 android android-recyclerview layouttransition

我有一个 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。

The demo project can be found here .

关于android - RecyclerView : Animate item resize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446051/

相关文章:

android - LayoutTransition 消失和改变不会同时发生

android - 排除某些元素在 android 布局转换中的动画效果

java - RecyclerView 项目单击的 Bottom Sheet 对话框

android - 如何用RecyclerView逆向构建GridLayout?

android - 如何在recyclerview gridlayout中使用notifydatasetchanged

android - Recyclerview 列表结束覆盖颜色和 alpha

android - LayoutTransitions 不适用于可见性更改

java - 在约束布局中嵌套

android - gradle如何解决Retrofit等不同版本的重复依赖?

android - 在方向更改后重新创建 Activity 之前更改Intent bundle 数据