Android

Android RecyclerView适配器Adapter、I

2020-11-19  本文已影响0人  可乐_JS

今天搞了下RecyclerView加载item动画,简单的总结哈!
改如何下手呢?
度一哈!
首先看到的是使用官方提供的DefaultItemAnimator,试了一波,效果不错,不过比较单一,但是可以自定义,项目比较急!!!不到万不得已,我还是算了吧!哈哈哈……
既然使用的是大名鼎鼎的BaseQuickAdapter,那么……
果然,BaseQuickAdapter不失所望
支持Item加载动画,而且还挺不错
那么,就干吧!

推荐使用BaseQuickAdapter 地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper

上图:


item加载动画-官方.gif item加载动画-BaseQuickAdapter.gif

上完图,那么接下来,就是代码:

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.https://www.jianshu.com/p/b343fcff51b0
2.https://www.jianshu.com/p/ce4a8a1743f1

上一篇 下一篇

猜你喜欢

热点阅读