通过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
本文探讨了在RecyclerView中实现自定义动画的方法,分析了RecyclerView动画的内部机制,特别是属性动画的运用。通过分析`postAnimationRunner`、`postOnAnimation`和`animateChangeImpl`等关键方法,揭示了如何利用`ViewPropertyAnimator`设置动画属性,并通过`ValueAnimator`和`Choreographer`驱动动画执行。当RecyclerView展开过多item导致超出视图高度时,动画会消失,这是因为RecyclerView根据自身高度限制了加载的item数量。属性动画的核心在于`ValueAnimator`的`startAnimation`和`Choreographer`的帧同步,确保了动画的平滑进行。
最低0.47元/天 解锁文章

6037

被折叠的 条评论
为什么被折叠?



