美文网首页高级UI面试题Android应用开发那些事
Android 上拉加载更多和下拉刷新

Android 上拉加载更多和下拉刷新

作者: 因为我的心 | 来源:发表于2019-07-24 22:05 被阅读0次

    一、前言:

    这一篇文章是解析Android智能下拉刷新框架-SmartRefreshLayout ,这是一篇上拉加载和下拉刷新,非常优秀的文章,里面丰富的动画,基本上能满足你的需求。

    它的项目地址:

    1. 支持类型

    • 支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多层嵌套的视图结构
    • 支持自定义并且已经集成了很多炫酷的 Header 和 Footer (图).
    • 支持和ListView的同步滚动 和 RecyclerView、AppBarLayout、CoordinatorLayout 的嵌套滚动 NestedScrolling.
    • 支持在Android Studio Xml 编辑器中预览 效果(图)
    • 支持分别在 Default(默认)、Xml、JavaCode 三个中设置 Header 和 Footer.
    • 支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉).
    • 支持通用的刷新监听器 OnRefreshListener 和更详细的滚动监听 OnMultiPurposeListener.
    • 支持自定义回弹动画的插值器,实现各种炫酷的动画效果.
    • 支持设置主题来适配任何场景的App,不会出现炫酷但很尴尬的情况.
    • 支持设置多种滑动方式来适配各种效果的Header和Footer:平移、拉伸、背后固定、顶层固定、全屏
    • 支持内容尺寸自适应 Content-wrap_content
    • 支持继承重写和扩展功能,内部实现没有 private 方法和字段,继承之后都可以重写覆盖
    • 支持越界回弹(Listview、RecyclerView、ScrollView、WebView...View)
    • 支持多点触摸,下拉、上拉各种手势冲突

    2. 部分展示效果图

    gif_practive_weibo.gif 11111.gif 2222.gif

    二、基本使用:

    1. 依赖:

    //普通用户依赖这个V1.1.0
    compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-31'
    //没有使用特殊Header,可以不加这行
    compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-31'
    //recyclerview依赖
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    
    
    //V1.1.0 androidx 版本,Android 水滴屏依赖这个
    //implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-andx-14'
    //implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-andx-14'
    

    2. 在XML布局文件中添加 SmartRefreshLayout(默认):

    <?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>
    

    3. 在 Activity 或者 Fragment 中添加代码:

    RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
    refreshLayout.setOnRefreshListener(new OnRefreshListener() {
        @Override
        public void onRefresh(RefreshLayout refreshlayout) {
            refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
        }
    });
    refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
        @Override
        public void onLoadMore(RefreshLayout refreshlayout) {
            refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
        }
    });
    

    三、使用指定的 Header 和 Footer

    1. 方法一 全局设置

    public class App extends Application {
        //static 代码段可以防止内存泄露
        static {
            //设置全局的Header构建器
            SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
                    @Override
                    public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                        layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
                        return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
                    }
                });
            //设置全局的Footer构建器
            SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
                    @Override
                    public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                        //指定为经典Footer,默认是 BallPulseFooter
                        return new ClassicsFooter(context).setDrawableSize(20);
                    }
                });
        }
    }
    

    注意:方法一 设置的Header和Footer的优先级是最低的,如果同时还使用了方法二、三,将会被其它方法取代

    2. XML布局文件指定

    <com.scwang.smartrefresh.layout.SmartRefreshLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#444444"
        app:srlPrimaryColor="#444444"
        app:srlAccentColor="@android:color/white"
        app:srlEnablePreviewInEditMode="true">
        <!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色-->
        <!--srlEnablePreviewInEditMode 可以开启和关闭预览功能-->
        <com.scwang.smartrefresh.layout.header.ClassicsHeader
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="@dimen/dimenPaddingCommon"
            android:background="@android:color/white"
            android:text="@string/description_define_in_xml"/>
        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
    

    3. XML布局文件指定

    注意:方法二 XML设置的Header和Footer的优先级是中等的,会被方法三覆盖。而且使用本方法的时候,Android Studio 会有预览效果,如下图:


    图片.png

    不过不用担心,只是预览效果,运行的时候只有下拉才会出现~

    4. Java代码设置

    final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
    //设置 Header 为 贝塞尔雷达 样式
    refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
    //设置 Footer 为 球脉冲 样式
    refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
    
    

    四、具体每个属性的用法:

    五、我的博客地址:

    相关文章

      网友评论

        本文标题:Android 上拉加载更多和下拉刷新

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