安卓动画(三)Recyclerview ItemAnimator(上)

本文探讨了Android RecyclerView中的ItemAnimator如何管理每个item变化时的动画,涉及删除、添加和位置变化时的动画效果。文章介绍了ItemAnimator的重要方法,如add、remove、move和change,以及它们在动画流程中的作用。通过分析系统的默认行为,揭示了动画执行的顺序,并讨论了与RecyclerView布局过程的关系。下篇将继续深入,结合实例讲解如何自定义ItemAnimator。

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

安卓动画(三)Recyclerview ItemAnimator(下)

前面讲了补间动画、Transition动画,属性动画,这一篇讲一讲和Recyclerview相关的动画。
Recyclerview里面有一个类ItemAnimator专门用来管理每个item变化时所对应的动画,当item被删除、添加、位置发生变化时,相应的动画就会被调用,从而给用户更好的体验,这一篇就原理、流程做一个大概的介绍。

由于ItemAnimator的流程还是比较复杂的,因为和recyclerview的layout过程是有一定耦合的而且涉及到ViewHolder的复用,因此只能简单的讲一下ItemAnimator的封装过程。ItemAnimator这个类里面有这么几个重要的方法:

public abstract boolean animateAppearance(@NonNull ViewHolder viewHolder,
                @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo);
public abstract boolean animateChange(@NonNull ViewHolder oldHolder,
                @NonNull ViewHolder newHolder,
                @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo);
public abstract boolean animateDisappearance(@NonNull ViewHolder viewHolder,
                @NonNull ItemHolderInfo preLayoutInfo, @Nullable ItemHolderInfo postLayoutInfo);
public abstract boolean animateAppearance(@NonNull ViewHolder viewHolder,
                @Nullable ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo);

上面几个方法看名字和源码注释就可以确定分别和view的出现、消失、改变等状态对应,比如当一个item要被remove掉,那么就要对这个ViewHolder调用animateDisappearance方法。然后还有运行动画的方法

public abstract void runPendingAnimations();

这是一个抽象方法,需要实现,主要是触发动画的开始,由于ItemAnimator这个类比较抽象,安卓为我们封装了一个类SimpleItemAnimator继承自RecyclerView.ItemAnimator,而且还抛出了几个抽象方法,需要我们实现:

public abstract boolean animateAdd(RecyclerView.ViewHolder holder);
public abstract boolean animateRemove(RecyclerView.ViewHolder holder);
public abstract boolean animateChange(RecyclerView.ViewHolder oldHolder,
            RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值