我有一个带有GridLayoutManager的RecyclerView(支持lib v7) . 我更新适配器并生成notifyItemMoved . 如果项目源位置在屏幕上并且目标位置也在屏幕上 - 则播放“移动动画” . 如果项目位于屏幕外的位置(位置1000,或远离视口的任何其他位置)并移动到视口中,它将显示“淡入淡出动画” .
尽管supportPredictiveItemAnimations()返回true,但预测项目动画看起来不起作用 . 难道我做错了什么?我应该覆盖一些方法来启用它吗?
我正在阅读RecyclerView的源代码,并在dispatchLayout方法的javadoc中写成:
移动PERSISTENT视图({@link ItemAnimator#animateMove(ViewHolder,int,int,int,int)})删除REMOVED视图({@link ItemAnimator#animateRemove(ViewHolder)})添加ADDED视图({@link ItemAnimator #animateAdd(ViewHolder)})DISAPPEARING视图移出屏幕外观视图移动到屏幕上
然而,ItemAnimator不区分ADDED和APPEARING . 是否有可能修复预测动画或至少使APPEARING动画看起来像“从屏幕动画外移动”原样提出ADDED动画?
2 回答
您可以尝试覆盖
LinearLayoutManager
的LinearLayoutManager
,为管理员提供预测动画的额外空间 .例子:
根据滚动视图的上一个滚动增量,将在开头或结尾添加额外的空间 . 您可以查看
LinearLayoutManager
LinearLayoutManager
的实现以获取更多详细信息 .我有同样的问题 . 检查您是否设置了ItemAnimator . 预测动画取决于它,因此如果您打算使用TransitionManager,则创建空的ItemAnimator以启用预测动画 .
您可以检查源代码(LinearLayoutManager:group:'com.android.support',name:'recyclerview-v7',version:'27 .0.2') .
700-703行:
state.willRunPredictiveAnimations() - 如果ItemAnimator为null,则返回false .
EmptyItemAnimator.java
现在你可以尝试: