去掉RecyclerView的默认item动画

去掉RecyclerView的默认item动画
https://blog.csdn.net/CSDN_LQR/article/details/54766560
虽说RecyclerView的默认item动画很炫酷,但是在开发中,客户的需求可能并不需要使用item动画,不仅觉得没用,反而觉得这些item动画是程序的bug。

本人在做开发仿微信项目时就遇到这类问题,动态增加、删除条目时就有一个切换的动画,这明显不是我想要的,于是百度,百度到一篇有点用的文章(RecyclerView局部刷新动画屏蔽添加链接描述),文章说到的只是针对RecyclerView的notifyItemChanged,notifyItemAdd,notifyItemRemoved方法的默认动画进行屏蔽,设置之后并不能解决我的问题,没有效果。

于是,继续研究,最后,得到一个结论:为了解决上述问题,有两种做法,一种是重写ItemAnimator并对RecyclerView进行设置(网友说的,但没有给出代码…),另一种是设置ItemAnimator的动画时间(自己无意间想到的,why? I don’t know),权衡自己的目前实力和项目时间,我决定使用第二种方式,在RecyclerView的源码中可以看到各种动画的执行时长如下:

private long mAddDuration = 120;
private long mRemoveDuration = 120;
private long mMoveDuration = 250;
private long mChangeDuration = 250;

而RecyclerView自带getItemAnimator().setXXDuration();方法。所以,接下来直接上代码(该代码中的this指的就是RecyclerView,是本人一个开源项目LQRRecyclerViewLibrary中的部分代码片段):


 /**
  * 打开默认局部刷新动画
  */
 public void openDefaultAnimator() {
     this.getItemAnimator().setAddDuration(120);
     this.getItemAnimator().setChangeDuration(250);
     this.getItemAnimator().setMoveDuration(250);
     this.getItemAnimator().setRemoveDuration(120);
     ((SimpleItemAnimator) this.getItemAnimator()).setSupportsChangeAnimations(true);
 }

 /**
  * 关闭默认局部刷新动画
  */
 public void closeDefaultAnimator() {
     this.getItemAnimator().setAddDuration(0);
     this.getItemAnimator().setChangeDuration(0);
     this.getItemAnimator().setMoveDuration(0);
     this.getItemAnimator().setRemoveDuration(0);
     ((SimpleItemAnimator) this.getItemAnimator()).setSupportsChangeAnimations(false);
 }

猜你喜欢

转载自blog.csdn.net/w690333243/article/details/89508086