去掉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);}總結
以上是生活随笔為你收集整理的去掉RecyclerView的默认item动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新年美食鉴赏——基于注意力机制CBAM的
- 下一篇: PotPlayer 无损截取视频片段