RecyclerView动画:属性动画

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值