RecyclerView预测项目动画不起作用(出现)

Vit*_*viy 5 android gridlayoutmanager android-recyclerview

我有一个带有GridLayoutManager的RecyclerView(支持lib v7)。我更新适配器,并使notifyItemMoved。如果项目的源位置在屏幕上并且目标位置也在屏幕上-则播放“移动动画”。如果项目位于屏幕外的位置(位置1000,或远离视口的任何其他位置)并移入视口,它将显示为“淡入动画”。

尽管supportsPredictiveItemAnimations()返回true,但看起来预测项目动画无法正常工作。难道我做错了什么?我应该重写一些方法来启用它吗?

我正在阅读RecyclerView的源代码,并且在dispatchdoc方法的javadoc中的编写方式如下:

  • 永久视图已移动({@link ItemAnimator#animateMove(ViewHolder,int,int,int,int)})
  • 已删除的视图已删除({@link ItemAnimator#animateRemove(ViewHolder)})
  • 添加了添加的视图({@link ItemAnimator#animateAdd(ViewHolder)})
  • 消失的视图移出屏幕
  • 出现的视图在屏幕上移动

但是,ItemAnimator不能区分ADDED和APPEARING。是否可以修复预报动画或至少使APPEARING动画看起来像“从屏幕动画之外移动”,而将添加的动画保持原样?

小智 0

您可以尝试覆盖getExtraLayoutSpace(RecyclerView.State state)LinearLayoutManager为管理器提供用于预测动画的额外空间。

例子 :

@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
    return getHeight(); // add extra page for better predictive animations
}
Run Code Online (Sandbox Code Playgroud)

额外的空间将添加在开头或结尾,具体取决于滚动视图的上一个滚动增量。您可以查看 的实现以了解更多详细信息onLayoutChildrenLinearLayoutManager