利用setClipToPadding(false)撸一个流畅的列表刷新控件

介绍了一种名为SmoothRefreshLayout的Android下拉刷新控件,它克服了现有解决方案的一些局限性,如复杂的适配器实现和不平滑的滚动体验。该控件通过调整列表的paddingTop和RefreshHeader的translationY来实现流畅的刷新效果。

项目地址:github.com/xiewinson/S…

原理

  • 目前我见过的很多 Android 下拉刷新控件实现方式,一种是通过把 RecyclerView 分为不同 itemType 然后第一个 item 就是展示刷新的那个 View (以下就称为 Refresh Header 吧);还有一种比较普遍即是通过 NestedScrolling 机制实现。前者的缺点是把 RecyclerView 的 Adapter 搞得很复杂,使用和定制起来也有点不太方便;后者的缺点是 NestedScrolling 机制在滑动展示刷新中正在转圈的 Refresh Header 时很钝,特别是当你进行快滑的时候,一下就过去了没有丝滑的感觉,参见微博的刷新就是这种感觉,其实也还好,但是强迫症多滑几次就会觉得好卡好顿,就想 Refresh Header 就能像是列表的一部分一样,滑起来很流畅。
  • RecyclerView 和 ListView 的 setClipToPadding 的作用想必不用多说。这个下拉刷新的思想主要就是在下拉时不断增加列表的 paddingTop,Refresh Header 通过监听列表的滑动事件对比 paddingTop 的变化调整 translationY 以达到隐藏/显示的目的

使用方式

  • 目前只支持 RecyclerView 和 ListView,在 xml 中包裹 RecyclerView/ListView
    <io.github.xiewinson.smoothrefreshlayout.library.SmoothRefreshLayout
      android:id="@+id/refreshLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:clipChildren="false">
      <android.support.v7.widget.RecyclerView
          android:id="@+id/recyclerview"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:padding="16dp" />
    </io.github.xiewinson.smoothrefreshlayout.library.SmoothRefreshLayout>复制代码
  • 在 java 中设置 RefreshHeader 和刷新监听,setRefreshing在切换开始刷新/完成刷新状态。DefaultRefreshHeaderWrapper 实现了默认的 View 效果,若需要自定义 RefreshHeader
    refreshLayout.setRefreshHeader(new DefaultRefreshHeaderWrapper(this));
    refreshLayout.setOnRefreshListener(new OnRefreshListener() {
      @Override
      public void onRefresh() {
          // todo
      }
    });
    refreshLayout.setRefreshing(true);复制代码

转载于:https://juejin.im/post/59ddc7146fb9a0451237ec31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值