我有一个带有 GridLayoutManager 的 RecyclerView (支持 lib v7)。我更新适配器并进行notifyItemMoved。如果项目源位置在屏幕上并且目标位置也在屏幕上 - 则播放“移动动画”。如果该项目位于屏幕外的位置(位置 1000,或任何其他远离视口的位置)并移入视口,它将显示“淡入动画”。
尽管 supportPredictiveItemAnimations() 返回 true,但看起来预测项目动画不起作用。难道我做错了什么?我应该重写一些方法来启用它吗?
我正在阅读RecyclerView的源代码,在javadoc中dispatchLayout方法是这样写的:
- 移动持久视图 ({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)})
- 已删除的视图已被删除 ({@link ItemAnimator#animateRemove(ViewHolder)})
- 添加了 ADDED 视图 ({@link ItemAnimator#animateAdd(ViewHolder)})
- 消失的视图已移出屏幕
- 出现的视图在屏幕上移动
然而 ItemAnimator 并不区分 ADDED 和 APPEARING。
是否可以修复预测动画或至少使出现的动画看起来像“从屏幕动画外部移动”,而保留添加的动画原样?
您可以尝试覆盖getExtraLayoutSpace(RecyclerView.State state)
of LinearLayoutManager
为经理提供额外的预测动画空间。
例子 :
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
return getHeight(); // add extra page for better predictive animations
}
额外的空间将添加在开头或结尾,具体取决于滚动视图的上一个滚动增量。你可以看一下实现onLayoutChildren
of LinearLayoutManager
更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)