美文网首页Android
Android RecyclerView适配器Adapter、I

Android RecyclerView适配器Adapter、I

作者: 可乐_JS | 来源:发表于2020-11-19 13:30 被阅读0次

    今天搞了下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

    相关文章

      网友评论

        本文标题:Android RecyclerView适配器Adapter、I

        本文链接:https://www.haomeiwen.com/subject/glnkiktx.html