通过RecyclerView的实现展开动画动画的时候,首先想到的是通过原生的方法notifyItemRangeChanged来实现。但是android并没有提供很多Api,让使用者来自定义动画。
为了更好的实现动画的自定义,必须查看RecyclerView动画的实现机制。在此基础上才能够有机会hook动画机制,从而实现更好的自定义。目前实现了动画的差值器、展开距离、动画时间的自定义。
从postAnimationRunner方法开始,RecyclerView的Item动画就真正的开始了。
通过postOnAnimation方法在主线程的handler中post了一个Runnable。这个Runnable中就是就是整个Item动画中心。所有Item的move、remove、add、change动画都是这里开始装载、开始的。
在runPendingAnimations方法中,我们来关注下change的动画。change动画是通过DefaultItemAnimator.ChangeInfo类来封装的,并通过列表(ArrayList<DefaultItemAnimator.ChangeInfo> mPendingChanges)来管理所有待动画的item项。ChangeInfo的添加逻辑逻辑就不在这里展开了感兴趣的同学可以查看Recycl