首先 RecycleView是有一套自己默认的动画、以及相应执行时机
但是在项目开发中,遇到了需要为删除item的动效进行调整
思路1. 可以在holder中(比如点删除的点击事件)直接为当前view设置自定义动画并执行
思路2. 重写recycleView默认动画 SimpleItemAnimator
简单的场景下思路1是可以达到预期效果的,但是个人在项目中遇到了另一个难题,ui给的动画需要在执行删除动画的同时 下方列表要同时上移。
但是recycleView默认的是删除动画执行完之后才去执行移动动画 这种情况下思路1就无法达到预期 只能重写SimpleItemAnimator了
好消息是recycleView自身已经封装好了一个默认DefaultItemAnimator
该类中对抽象类SimpleItemAnimator所有方法都以重写实现 我们只要继承DefaultItemAnimator对需要调整的方法重写即可
坏消息是 内部没有能直接提供调用开始移动动画或删除动画的方法 有的是runPendingAnimations() 该方法内部设置了各个动画的执行时机,我们重写这个方法 几乎等同于需要重写整个类
源码如下
@Override
public void runPendingAnimations() {
boolean removalsPending = !mPendingRemovals.isEmpty();
boolean movesPending = !mPendingMoves.isEmpty();
boolean changesPending = !mPendingChanges.isEmpty();
boolean additionsPending = !mPendingAdditions.isEmpty();
// 判断是否有动画需要执行
if (!