【发布时间】:2015-05-24 12:50:56
【问题描述】:
我有一个带有 GridLayoutManager 的 RecyclerView(支持 lib v7)。我更新适配器并制作 notifyItemMoved。如果项目源位置在屏幕上并且目标位置也在屏幕上 - 播放“移动动画”。如果项目位于屏幕外的位置(位置 1000,或任何其他远离视口的位置)并移入视口,它将显示“动画淡入淡出”。
看起来预测项目动画不起作用,尽管事实上 supportsPredictiveItemAnimations() 返回 true。难道我做错了什么?我应该重写一些方法来启用它吗?
我在看RecyclerView的源码,在javadoc中dispatchLayout方法是这样写的:
- PERSISTENT 视图被移动({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)})
- REMOVED 视图被移除 ({@link ItemAnimator#animateRemove(ViewHolder)})
- 添加了视图 ({@link ItemAnimator#animateAdd(ViewHolder)})
- 消失的视图被移出屏幕
- 出现的视图在屏幕上移动
尽管如此,ItemAnimator 并不区分 ADDED 和 APPEARING。 是否可以修复预测动画或至少使 APPEARING 动画看起来像“从屏幕动画外部移动”而留下 ADDED 动画?
【问题讨论】:
-
我认为出现是用于视图可见性更改,而不是添加到适配器?
-
@stkent 这里是javadoc,你可以查看:source
-
啊,我明白了。我记得读过一篇讨论淡入问题的文章。详情请见wiresareobsolete.com/2015/02/recyclerview-layoutmanager-3。
标签: android android-recyclerview gridlayoutmanager