AndroidAndroidAndroid之界面

下拉刷新,上拉加载,推荐框架

2019-01-22  本文已影响381人  红茶炒饭

鸣谢作者

作者 作者 作者
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇

最新依赖

在导入一行时 implementation 'com.android.support:appcompat-v7:25.3.1' 会提示你修改版本 按要求修改即可


//1.1.0 API改动过大,老用户升级需谨慎
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-19'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-19'//没有使用特殊Header,可以不加这行
implementation 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)

使用方式

布局以包裹的形式 用法与 SwipeRefreshLayout 一样的
这里要提一句:因为加载和刷新的动画效果,也就是header和footer不是在列表本身上添加的,也就是说,无论是你的刷新或者是加载,都不会改变条目的当前 position

下拉时 条目0 的 position 依然是0
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:background="#fff" />

</com.scwang.smartrefresh.layout.SmartRefreshLayout>

private SmartRefreshLayout mSmartRefreshLayout;
mSmartRefreshLayout = (SmartRefreshLayout) findViewById(R.id.SmartRefreshLayout);

/*下拉刷新*/
mSmartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
             
            }
        });

/*上拉加载*/    
mSmartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
              
            }
        });

代码API 作者出处

 RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
 refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
 refreshLayout.setDragRate(0.5f);//显示下拉高度/手指真实下拉高度=阻尼效果
 refreshLayout.setReboundDuration(300);//回弹动画时长(毫秒)

 refreshLayout.setHeaderHeight(100);//Header标准高度(显示下拉高度>=标准高度 触发刷新)
 refreshLayout.setHeaderHeightPx(100);//同上-像素为单位 (V1.1.0删除)
 refreshLayout.setFooterHeight(100);//Footer标准高度(显示上拉高度>=标准高度 触发加载)
 refreshLayout.setFooterHeightPx(100);//同上-像素为单位 (V1.1.0删除)

 refreshLayout.setFooterHeaderInsetStart(0);//设置 Header 起始位置偏移量 1.0.5
 refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)
 refreshLayout.setFooterFooterInsetStart(0);//设置 Footer 起始位置偏移量 1.0.5
 refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)

 refreshLayout.setHeaderMaxDragRate(2);//最大显示下拉高度/Header标准高度
 refreshLayout.setFooterMaxDragRate(2);//最大显示下拉高度/Footer标准高度
 refreshLayout.setHeaderTriggerRate(1);//触发刷新距离 与 HeaderHeight 的比率1.0.4
 refreshLayout.setFooterTriggerRate(1);//触发加载距离 与 FooterHeight 的比率1.0.4

 refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
 refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能
 refreshLayout.setEnableAutoLoadMore(true);//是否启用列表惯性滑动到底部时自动加载更多
 refreshLayout.setEnablePureScrollMode(false);//是否启用纯滚动模式
 refreshLayout.setEnableNestedScroll(false);//是否启用嵌套滚动
 refreshLayout.setEnableOverScrollBounce(true);//是否启用越界回弹
 refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加载完成时滚动列表显示新的内容
 refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的时候向下平移列表或者内容
 refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的时候向上平移列表或者内容
 refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不满一页时候开启上拉加载功能
 refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加载结束之后Footer跟随内容1.0.4
 refreshLayout.setEnableOverScrollDrag(false);//是否启用越界拖动(仿苹果效果)1.0.4

 refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成时滚动列表显示新的内容 1.0.5
 refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header当时样式为FixedBehind时1.0.5
 refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer当时样式为FixedBehind时1.0.5

 refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的时候禁止列表的操作
 refreshLayout.setDisableContentWhenLoading(false);//是否在加载的时候禁止列表的操作

 refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//设置多功能监听器
 refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//设置滚动边界判断
 refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定义滚动边界

 refreshLayout.setRefreshHeader(new ClassicsHeader(context));//设置Header
 refreshLayout.setRefreshFooter(new ClassicsFooter(context));//设置Footer
 refreshLayout.setRefreshContent(new View(context));//设置刷新Content(用于非xml布局代替addView)1.0.4

 refreshLayout.autoRefresh();//自动刷新
 refreshLayout.autoLoadMore();//自动加载
 refreshLayout.autoRefresh(400);//延迟400毫秒后自动刷新
 refreshLayout.autoLoadMore(400);//延迟400毫秒后自动加载
 refreshLayout.finishRefresh();//结束刷新
 refreshLayout.finishLoadMore();//结束加载
 refreshLayout.finishRefresh(3000);//延迟3000毫秒后结束刷新
 refreshLayout.finishLoadMore(3000);//延迟3000毫秒后结束加载
 refreshLayout.finishRefresh(false);//结束刷新(刷新失败)
 refreshLayout.finishLoadMore(false);//结束加载(加载失败)
 refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 1.0.4
 refreshLayout.closeHeaderOrFooter();//关闭正在打开状态的 Header 或者 Footer(1.1.0)
 refreshLayout.resetNoMoreData();//恢复没有更多数据的原始状态 1.0.4(1.1.0删除)
 refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态 1.0.5
▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇

样式展示

这个实现方式去参照作者的官方文档 SmartRefreshLayout官方

<com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/SmartRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.scwang.smartrefresh.layout.header.ClassicsHeader
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>


        <android.support.v7.widget.RecyclerView
            android:id="@+id/RecyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


        </android.support.v7.widget.RecyclerView>

        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>


    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
    
header.ClassicsHeader 和 footer.ClassicsFooter
header.FalsifyHeader 和 footer.FalsifyFooter 注意这个样式无法使用以上的一些控制方法比如设置延迟
header.BezierRadarHeader 和 footer.BallPulseFooter
上一篇下一篇

猜你喜欢

热点阅读