今天搞了下RecyclerView加载item动画,简单的总结哈!
改如何下手呢?
度一哈!
首先看到的是使用官方提供的DefaultItemAnimator,试了一波,效果不错,不过比较单一,但是可以自定义,项目比较急!!!不到万不得已,我还是算了吧!哈哈哈……
既然使用的是大名鼎鼎的BaseQuickAdapter,那么……
果然,BaseQuickAdapter不失所望
支持Item加载动画,而且还挺不错
那么,就干吧!
推荐使用BaseQuickAdapter 地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper
上图:
上完图,那么接下来,就是代码:
1.官方实现:
//1.官方实现
DefaultItemAnimator itemAnimator = new DefaultItemAnimator();
itemAnimator.setSupportsChangeAnimations(true);
itemAnimator.setAddDuration(1000);
itemAnimator.setChangeDuration(1000);
itemAnimator.setMoveDuration(1000);
itemAnimator.setRemoveDuration(1000);
//由于我是用的是BaseQuickAdapter,默认item的动画是关闭的,所以需要手动打开
mAdapter.setAnimationEnable(true);
rv.setItemAnimator(itemAnimator);
关于notify,需要使用下面对应的方法:
notifyItemChanged(int)
notifyItemInserted(int)
notifyItemRemoved(int)
notifyItemRangeChanged(int, int)
notifyItemRangeInserted(int, int)
notifyItemRangeRemoved(int, int)
注:网上都是这么说的,由于我使用的是BaseQuickAdapter,我直接mList.addAll()后就直接刷新了,这一点有心的网友可以再次验证一哈!
2.BaseQuickAdapter实现:
//2.BaseQuickAdapter实现
//开启动画
mAdapter.setAnimationEnable(true);
//设置动画类型
mAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInLeft);
//是否只执行一次动画
mAdapter.setAnimationFirstOnly(false);
//自定义动画
// mAdapter.setAdapterAnimation(new BaseAnimation() {
// @NotNull
// @Override
// public Animator[] animators(@NotNull View view) {
// return new Animator[]{
// ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1),
// ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1)
// };
// }
// });
在对应的Adapter中,添加如下代码:
private int mPageCanShowSize = 3;//第一页可以显示的数量
/**
* 由于进入界面的item都是很多的速度进来的所以不会出现滑动显示的依次执行动画效果,这个时候会一起执行动画,
* 如果需要依次执行动画可以重写startAnim让第一个屏幕的item动画延迟执行即可。
*
* @param anim
* @param index
*/
@Override
protected void startAnim(@NotNull Animator anim, int index) {
if (index < mPageCanShowSize) {
anim.setStartDelay(index * 150);
}
super.startAnim(anim, index);
}
参考链接:
1.//www.greatytc.com/p/b343fcff51b0
2.//www.greatytc.com/p/ce4a8a1743f1