【发布时间】:2014-10-12 08:15:30
【问题描述】:
当我滚动 RecyclerView 时,有什么方法可以为它的元素设置动画吗?
我看了DefaultItemAnimator和RecyclerView.ItemAnimator,但动画似乎只有在数据集发生变化时才会被调用,如果我错了,请纠正我。
我对@987654323@ 什么时候调用有点困惑?我在该类中设置了一些断点,但它们都没有停止我的应用程序。
但是回到我的问题,如何为 RecyclerView 设置动画?我希望某些元素具有另一种不透明度,这取决于一些自定义规则。
我做了更多的研究,似乎动画移动正是我正在寻找的。这些方法是从dispatchLayout() 调用的。这是该方法的javadoc:
layoutChildren() 的包装器,用于处理由布局引起的动画变化。 动画的工作假设有五种不同的项目 在玩:
PERSISTENT:项目在布局前后可见
已移除:项目在布局之前可见并已被应用程序移除
添加:项目在布局之前不存在并且由应用程序添加
DISAPPEARING:项目之前/之后存在于数据集中,但从 在布局过程中可见到不可见(它们被移走 屏幕作为其他更改的副作用)
出现:项目之前/之后存在于数据集中,但从 在布局过程中不可见到可见(它们被移到 屏幕作为其他更改的副作用)
整体方法找出布局之前/之后存在哪些项目,以及 推断每个项目的上述五种状态之一。然后是动画 相应地设置:
PERSISTENT 视图被移动({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)}) REMOVED 视图被移除 ({@link ItemAnimator#animateRemove(ViewHolder)})
添加了视图 ({@link ItemAnimator#animateAdd(ViewHolder)})
消失的视图被移出屏幕
出现的视图在屏幕上移动
到目前为止,我正在寻找 PERSISTENT、DISAPPEARING 和 APPEARING,但由于这里的这一行,这些方法永远不会被调用:
boolean animateChangesSimple = mItemAnimator != null && mItemsAddedOrRemoved
&& !mItemsChanged;
mItemsAddedOrRemoved 总是假的,所以没有一个回调到达。知道如何正确设置设置标志吗?
【问题讨论】:
-
您可以使用 api11 中引入的 objectanimtor 对任何对象进行动画处理
-
很好,但是我怎么知道什么时候需要开始动画呢?
标签: android android-animation android-recyclerview