美文网首页
RecyclerView之加载动画

RecyclerView之加载动画

作者: 俗人浮生 | 来源:发表于2019-03-07 22:26 被阅读0次

今天推荐一个RecyclerView的加载动画开源框架:recyclerview-animators,详情查看:github地址

这个框架接入非常简单,完全不用破坏你原有的adapter,而是采用传参扩展的方法进行包装,并且支持多种动画同时进行,举一个简单的例子:

SlideInRightAnimationAdapter slideInRightAnimationAdapter = new SlideInRightAnimationAdapter(adapter);
AlphaInAnimationAdapter alphaInAnimationAdapter = new AlphaInAnimationAdapter(slideInRightAnimationAdapter);
recyclerView.setAdapter(alphaInAnimationAdapter);

就这么简单的为你原来的adapter添加了两种动画,第一种是从右边向左边滑进,第二种是透明度变化,3行代码让你的RecyclerView瞬间高大上起来,效果还是很不错的!

笔者接入后,发现一个问题:这么棒的动画效果貌似只能在首次加载才有效,当然,这也没什么不妥的,但是,一般RecyclerView都会做下拉刷新功能,我们当然希望下拉刷新,清空数据重新加载后,仍然能看到动画效果,这可怎么办呢?

不要慌,看源码啊!

其实这个开源框架并不复杂,定义了一个抽象类AnimationAdapter,继承于我们常用的RecyclerView.Adapter,然后覆盖onBindViewHolder方法,对holder.itemView执行各种各样的属性动画。其中,是否执行动画关键就在于覆盖的onBindViewHolder方法中,如下:

@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    mAdapter.onBindViewHolder(holder, position);

    int adapterPosition = holder.getAdapterPosition();
    if (!isFirstOnly || adapterPosition > mLastPosition) {
      for (Animator anim : getAnimators(holder.itemView)) {
        anim.setDuration(mDuration).start();
        anim.setInterpolator(mInterpolator);
      }
      mLastPosition = adapterPosition;
    } else {
      ViewHelper.clear(holder.itemView);
    }
  }

注意到那个if语句没?isFirstOnly 这个变量的默认值是true,当然提供了相应的API:setFirstOnly(boolean firstOnly)可进行更改,如果设置为false后,根据判断条件,无论怎么都会一直执行加载动画,但这还不足以解决我们的问题啊,我们要的是:正常只有第一次加载才出现动画,只有在下拉刷新后才让加载动画重新出现。

看到条件判断中或语句后面的条件没:adapterPosition > mLastPosition,只要满足这个条件,那么也会执行加载动画,如果isFirstOnly=true,我们就是靠满足这个条件来执行第一次加载的动画的,关键就在于mLastPosition,它的默认值是-1,当完成第一次加载后,它会被设置会目前数据的最大位置值。

所以,解决的方案也非常简单,只需要在下拉刷新后,将mLastPosition重新恢复默认值-1即可,往下翻,果然找到了相应的API:setStartPosition(int start)

当然,如果你的RecyclerView有头部的话,建议下拉刷新后,将mLastPosition设置为0,这样的话头部就不会执行加载动画了。

事实再次证明,当你遇到问题时,并不一定非要去网上搜答案不可,你完全可以通过自己阅读源码来解决问题,而且,阅读源码的过程总会让你有意外之喜,你能在这个过程中学到很多的知识、设计方案以及编程思想。前提是你要能够沉下心来好好看,好好学。

相关文章

  • RecyclerView之加载动画

    今天推荐一个RecyclerView的加载动画开源框架:recyclerview-animators,详情查看:g...

  • RecyclerView item加载动画

    效果图: xml文件 在res目录下新建文件夹命名为anim,在anim中新建xml文件 item_anim.xm...

  • RecyclerView 首次加载动画总结

    1.RecyclerView动画原理 这几天熟悉了RecyclerView的使用以及内部动画机制,有几篇文章做备忘...

  • 闪烁加载视图 - ShimmerRecyclerView

    今天看到一个和支付宝加载RecyclerView显示加载中动画类似的库,感觉很有意思,参照官网说明写一个粗浅的使用...

  • Android面试整理

    RecyclerView的上拉加载、下拉刷新怎么实现?RecyclerView原生实现侧滑、拖动? 上拉加载、下拉...

  • RecyclerView<第十六篇>:条目动画之自定义Defau

    为了让RecyclerView更加用户友好,可以给条目添加动画,RecyclerView可以设置条目动画 设置条目...

  • Android RecyclerView适配器Adapter、I

    今天搞了下RecyclerView加载item动画,简单的总结哈!改如何下手呢?度一哈!首先看到的是使用官方提供的...

  • RecyclerView之条目动画

    一,自带的条目动画 我们先来看看系统自带的动画设置实现: 这样我们就实现了动画的添加,通过添加和删除可以看出默认的...

  • android学习之DefaultItemAnimator

    合理使用App动画能够增加用户的吸引力,今天学习了RecyclerView的动画效果。RecyclerView中的...

  • 列表

    RecyclerView更全解析之 - 打造通用的下拉刷新上拉加载 AutoFlowLayout-多功能流式布局与...

网友评论

      本文标题:RecyclerView之加载动画

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