如何在RecyclerView项目中实现动画效果?
嘿,在RecyclerView里实现指定动画其实有不少靠谱的路子,我给你拆解几种常用方案,你可以根据自己要的效果来选:
一、用系统默认动画快速起步
RecyclerView本身就自带了基础的增删改动画,不用写太多代码就能启用:
- 只需要给RecyclerView设置默认的ItemAnimator就行:
recyclerView.setItemAnimator(new DefaultItemAnimator());
这个默认动画会处理Item添加、删除、更新时的淡入淡出、位移效果,适合快速实现基础动效。
二、自定义ItemAnimator实现专属增删改动画
如果默认动画满足不了需求,比如你想要Item从底部滑入、从左侧滑出这类自定义效果,就可以自己继承DefaultItemAnimator重写对应方法:
比如下面这个例子是实现添加Item时从底部滑入的动画:
public class SlideInBottomItemAnimator extends DefaultItemAnimator { @Override public boolean animateAdd(RecyclerView.ViewHolder holder) { // 初始状态:Item在底部外,完全透明 holder.itemView.setTranslationY(holder.itemView.getHeight()); holder.itemView.setAlpha(0f); // 执行动画:滑到原位,渐显 ViewCompat.animate(holder.itemView) .translationY(0) .alpha(1f) .setDuration(getAddDuration()) .setListener(new DefaultAddVpaListener(holder)) .start(); return true; } }
使用的时候直接替换默认Animator就行:
recyclerView.setItemAnimator(new SlideInBottomItemAnimator());
注意: 重写animateRemove()、animateChange()就能自定义删除、更新时的动画,记得处理动画结束后的View状态,避免布局错乱。
三、滚动时的Item动画(比如滚动加载时渐入)
如果要实现滚动列表时,新进入视野的Item有动画效果,可以结合RecyclerView.OnScrollListener来做:
- 首先在Adapter的
onBindViewHolder里给Item设置初始状态(比如完全透明):
@Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { // 初始隐藏 holder.itemView.setAlpha(0f); // 其他绑定逻辑... }
- 给RecyclerView添加滚动监听,对进入视野的Item执行动画:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); int firstVisiblePos = layoutManager.findFirstVisibleItemPosition(); int lastVisiblePos = layoutManager.findLastVisibleItemPosition(); for (int i = firstVisiblePos; i <= lastVisiblePos; i++) { View itemView = layoutManager.findViewByPosition(i); if (itemView != null && itemView.getAlpha() == 0f) { ViewCompat.animate(itemView) .alpha(1f) .setDuration(500) .start(); } } } });
这样滚动时新出现的Item就会慢慢淡入,你也可以改成缩放、位移这类动画。
四、用第三方库快速实现复杂动画
要是不想自己写代码折腾,也可以用成熟的第三方库,比如RecyclerViewAnimators,里面预设了超多动画效果:
- 先在build.gradle里添加依赖:
implementation 'jp.wasabeef:recyclerview-animators:4.0.2'
- 直接使用预设动画:
// 比如SlideInUp动画 RecyclerView.ItemAnimator animator = new SlideInUpAnimator(); recyclerView.setItemAnimator(animator);
库里面还有翻转、缩放、弹跳等几十种动画,省得自己从头写。
小提醒: 不管用哪种方式,动画时长别设太长,也别加太多复杂动画,不然会影响RecyclerView的滚动流畅度哦~
内容的提问来源于stack exchange,提问作者erKaranjeet
相关产品推荐
相关产品推荐

