本文深入探讨了RecyclerView动画的实现原理,包括初始化、添加、移除、更新数据时的动画效果。通过自定义ItemAnimator,详细解释了如何实现添加、移动ItemView的动画效果,以及如何利用ViewCompat进行兼容性处理。
摘要生成于
,由 DeepSeek-R1 满血版支持,
什么时候开始的 RecyclerView animation,在我们UI 2.0~3.0的时候,很多地方都需要这种 RecyclerView 界面
初始化
,
添加
,
移除
,
更新
数据的 动画效果样式.
看几个RecycelrView Adapter 初始化的小DEMO
除了这种方式进行初始化,我们还可以用前面所讲的过渡动画来进行
Transition explode = new Explode();
explode.setDuration(1000);
TransitionManager.beginDelayedTransition(recyclerView, explode);
if (recyclerView.getAdapter() != null) {
recyclerView.setAdapter(null);
} else {
recyclerView.setAdapter(mColorsAdapter);
再看看 RecyclerView Item 添加,移除,更新的的小栗子

如果没有设置 Item animation,RecyclerView 默认使用的就是 DefaultItemAnimator(继承的 SimpleItemAnimator)
。
如果想实现上面的一些效果(Demo地址),我们就需要 自定义自己的 Item Animator ,只需要继承 SimpleItemAnimator,重写几个关键的重要函数
函数名 | 含义 |
---|
animateRemove | item 移除时的动画 |
animateAdd | item 添加时的动画 |
animateMove | 移动时的动画 列表项位置移动时调用 |
animateChange | item 更新时的动画 |
runPendingAnimations | 真正控制执行动画的地方 |
endAnimation | 停止某个Item的动画 |
endAnimations | 停止所有动画 |
isRunning | 返回当前是否有动画需要执行 |
在自定义Item Animator 中会调用到的相关函数:
函数名 | 含义 |
---|
dispatch(Add/Remove/Move/Change)Starting | 动画开始时调用,比如Add dispatchAddStarting |
dispatch(Add/Remove/Move/Change)Finished | 动画结束时调用,比如Add dispatchAddFinished |
dispatchAnimationsFinished | 所有动画结束时调用 |
引发 Item 动画的几个函数
Adapter.notifyItemInserted(int position)
Adapter.notifyItemRemoved(int position)
Adapter.notifyItemChanged(int position)
Adapter.notifyItemMoved(int fromPosition, int toPosition)
先来自定义的一个添加Item View的动画效果的小DEMO
public class CumtomAnimator extends SimpleItemAnimator {
private ArrayList<RecyclerView.ViewHolder> mPendingAdditions = new ArrayList<>();
@Override
public boolean animateAdd(RecyclerView.ViewHolder holder) {
mPendingAdditions.add(holder);
@Override
public void runPendingAnimations() {
for (RecyclerView.ViewHolder holder : mPendingAdditions) {
ViewCompat.animate(holder.itemView)
.scaleX(1.0f)
.scaleY(1.0f)
.setDuration(getAddDuration())
.start();
mPendingAdditions.clear();
@Override
public boolean isRunning() {
return !mPendingAdditions.isEmpty()
|| ... ...
... ...
ViewCompat:android官方实现兼容的一个帮助类,具体可以查找网上相关资料
官方资料
可以试试(notifyItemInserted(position)
)有没有动画效果,肯定是没有效果的,因为没有去初始化它 起始的样子!!!

来改改代码… …
... ...
public boolean animateAdd(RecyclerView.ViewHolder holder) {
View itemView = holder.itemView;
ViewCompat.setPivotY(itemView, itemView.getMeasuredHeight() / 2);
ViewCompat.setPivotX(itemView, itemView.getMeasuredWidth() / 2);
ViewCompat.setScaleX(itemView, 0);
ViewCompat.setScaleY(itemView, 0);
mPendingAdditions.add(holder);
... ...
代码修改后,添加 ItemView 就能达到下面的效果。

你会发现,上面的 RecyclerView ItemView的添加
动画效果,还行,就是新增的时候,下面的其它的ItemView 移动的很生硬,所以这里就引出了 animateMove
函数。
函数名 | 参数 | 参数含义 |
---|
animateMove | (final ViewHolder holder, int fromX, int fromY, int toX, int toY) | 列表项位置移动时调用,移动的ViewHolder;fromX 起始x,y值;toX 目标x,y值 |
@Override
public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
final View view = holder.itemView;
int deltaX = toX - fromX;
int deltaY = toY - fromY;
if (deltaX != 0) {
ViewCompat.setTranslationX(view, -deltaX);
if (deltaY != 0) {
ViewCompat.setTranslationY(view, -deltaY);
mPendingMoves.add(new MoveInfo(holder, fromX, fromY, toX, toY));
@Override
public void runPendingAnimations() {
... ...
for (MoveInfo moveInfo : mPendingMoves) {
ViewCompat.animate(moveInfo.holder.itemView)
.translationX(0)
.translationY(0)
.setDuration(getMoveDuration())
.start();
mPendingMoves.clear();
... ...
整个添加Item View的动画效果,就这样完成啦!!!

当然在项目,肯定没有那么简单,这里只是简单的举个小栗子,给大家说明下几个函数的重要性.
如果是项目中使用,只需要继承这个 BaseitemAnimator
,写一些自己想要的效果就OK,不过这里已经实现了大多数的动画效果。

需要使用以上效果的小伙伴,自行下载,代码库地址

RecyclerView animations 国外大神文章
RecyclerView anim视频
掌握RecyclerView动画不得不看的文章
谷歌API文档
深入理解 RecyclerView 系列之二:ItemAnimator
自定义RecyclerView ItemAnimator 上
自定义RecyclerView ItemAnimator 下
Android动画了解—转场/过渡(Transition) 动画<=上个章节 下个章节=> Android动画了解—其它动画
RecyclerView的强大之处相信大家已经体验到了,在上一篇RecyclerView详解 —— 自定义分割线我们学习了如何定义分割线,本篇将带领大家走进RecyclerView的动画世界。Google为我们提供了一个默认的动画实现,当数据添加、删除、更新时,会触发默认的动画效果:
接下来我们将一步步分析这个实现类,最后在它的基础上修改默认的动画效果。先来看DefaultItemAnimat
这一篇就实现下面两种效果:
实现之前,就是要对系统为我们实现的DefaultItemAnimator这个类进行改造,自己仿照写一个BaseItemAnimator,再在这个类的基础上,自定义我们自己的各种各样的动画,以add动画改造进行举例,DefaultItemAnimator中关于add动画有两个方法:animateAdd和animateAddImpl
@Override
public...
RecyclerView item
动画
RecyclerView有一个方法
RecyclerView.setItem
Animator( ),这个方法就是添加item
动画的,该方法需要一个
RecyclerView.Item
Animator对象。
RecyclerView.Item
Animator
可以通过实现
RecyclerView.Item
Animator来实现
recyclerView.setItem
Animator(new
RecyclerView.Item
Animator() {
RecyclerView动画师
RecyclerView Animators是一个Android库,允许开发人员轻松创建带有动画的RecyclerView。
请随时使用。
对动画添加和删除
项目的外观动画
ItemAnimator
如何使用?
Gradle
在模块的build.gradle文件上,将此实现语句添加到dependencies部分:
dependencies {
// Kotlin
implementation ' jp.wasabeef:recyclerview-animators:4.x.x '
还要确保repositories部分不仅包括jcenter,而且包括带有"google()"端点的maven部分。
repositories {
google()
jcenter()
ItemAnimator
设置RecyclerView ItemAnimator。
val recyclerView = findViewById < RecyclerView> (R.id.list)
recycle
recyclerView1 = findViewById(R.id.
recyclerView1);
2.设置为线性布局(这里在linearlayout,gridlayout,StaggeredGridLayout中选一种)
recyclerView1.setLayoutManager(new LinearLayoutManager(this));
3.初始化数据
initData();
这个方法的具体内容是:
RecyclerView作为
Android中最重要的一个系统组件,在用户界面展示时就势必要展示其最好的一面(美观、健壮、优化)。本文将通过设置Animation来快速地达到设置各种炫酷的
动画效果。
一:基本配置
首先先创建一个
RecyclerView示例项目。其工程结构如图所示:
Bean.java,BeanAdapter.java,MainActivity.java这三个文件分别代表
RecyclerView子项的实体Bean,
RecyclerView适配器,主活动。其代码如下:
Bean.jav
推荐一个强大且易用的Android动画库:RecyclerView Animators
在移动应用开发中,动效是一个能提升用户体验的重要元素。RecyclerView作为Android的主要列表组件,通过添加适当的动画效果,可以极大地增强其吸引力和交互性。今天,我们要向你推荐一个专为RecyclerView设计的强大动画库——RecyclerView Animators。
1. 项目介绍
Recy...