• Stars
    star
    4,309
  • Rank 9,999 (Top 0.2 %)
  • Language
    Java
  • Created over 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位

🏃BGARefreshLayout-Android🏃

Android Arsenal License Download

开发者使用 BGARefreshLayout-Android 可以对各种控件实现多种下拉刷新效果、上拉加载更多以及配置自定义头部广告位

测试 BGARefreshLayout 与 Activity、Fragment、ViewPager 的各种嵌套的 Demo

常见问题-加载更多视图无法显示

1.BGARefreshLayout 的直接子控件的高度请使用 android:layout_height="0dp" 和 android:layout_weight="1"

<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_modulename_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- BGARefreshLayout 的直接子控件 -->
    <AnyView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</cn.bingoogolapple.refreshlayout.BGARefreshLayout>

2.如果是在 Fragment 中使用 BGARefreshLayout

请在 onCreateView 方法中初始化 BGARefreshLayout,不要在 onActivityCreated 方法中初始化

目前已经实现了四种下拉刷新效果:

  • 新浪微博下拉刷新风格(可设置各种状态是的文本,可设置整个刷新头部的背景)
  • 慕课网下拉刷新风格(可设置其中的 logo 和颜色成自己公司的风格,可设置整个刷新头部的背景)
  • 美团下拉刷新风格(可设置其中的图片和动画成自己公司的风格,可设置整个刷新头部的背景)
  • 类似 qq 好友列表黏性下拉刷新风格(三阶贝塞尔曲线没怎么调好,刚开始下拉时效果不太好,可设置整个刷新头部的背景)

一种上拉加载更多效果

  • 新浪微博上拉加载更多(可设置背景、状态文本)

开发者也可以继承 BGARefreshViewHolder 这个抽象类,实现相应地抽象方法做出格式各样的下拉刷新效果【例如实现 handleScale(float scale, int moveYDistance) 方法,根据 scale 实现各种下拉刷新动画】和上拉加载更多特效,可参考 BGAMoocStyleRefreshViewHolder、BGANormalRefreshViewHolder、BGAStickinessRefreshViewHolder、BGAMeiTuanRefreshViewHolder 的实现方式。

目前存在的问题

  • 当配置自定义头部广告位可滚动时,内容区域和广告位还不能平滑过度。
  • 当 BGAStickyNavLayout 中嵌套 RecyclerView 或 AbsListView,并且第一页的最后一个 item 刚好在最底部时,加载更多视图会悬浮在最后一个 item 上面
  • 正在刷新或加载更多时,用户上下滑动不会让下拉刷新视图和加载更多视图跟着滑动

效果图

bga_refreshlayout1 bga_refreshlayout2 bga_refreshlayout3 bga_refreshlayout4 bga_refreshlayout5 bga_refreshlayout6

基本使用

1.添加 Gradle 依赖

  • maven { url 'https://jitpack.io' } 添加到 root build.gradle 的 repositories 中
  • 在 app build.gradle 中添加如下依赖,末尾的「latestVersion」指的是徽章 里的版本名称,请自行替换
dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.github.bingoogolapple:BGARefreshLayout-Android:latestVersion'
}

2.在布局文件中添加 BGARefreshLayout

注意:内容控件的高度请使用 android:layout_height="0dp" 和 android:layout_weight="1"

<cn.bingoogolapple.refreshlayout.BGARefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_modulename_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 内容控件 -->
    <AnyView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</cn.bingoogolapple.refreshlayout.BGARefreshLayout>

3.在 Activity 或者 Fragment 中配置 BGARefreshLayout

// 让 activity 或者 fragment 实现 BGARefreshLayoutDelegate 接口
public class ModuleNameActivity extends AppCompatActivity implements BGARefreshLayout.BGARefreshLayoutDelegate {
    private BGARefreshLayout mRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_moudlename);

        initRefreshLayout();
    }

    private void initRefreshLayout(BGARefreshLayout refreshLayout) {
        mRefreshLayout = (BGARefreshLayout) findViewById(R.id.rl_modulename_refresh);
        // 为BGARefreshLayout 设置代理
        mRefreshLayout.setDelegate(this);
        // 设置下拉刷新和上拉加载更多的风格     参数1:应用程序上下文,参数2:是否具有上拉加载更多功能
        BGARefreshViewHolder refreshViewHolder = new XXXImplRefreshViewHolder(this, true))
        // 设置下拉刷新和上拉加载更多的风格
        mRefreshLayout.setRefreshViewHolder(refreshViewHolder);


        // 为了增加下拉刷新头部和加载更多的通用性,提供了以下可选配置选项  -------------START
        // 设置正在加载更多时不显示加载更多控件
        // mRefreshLayout.setIsShowLoadingMoreView(false);
        // 设置正在加载更多时的文本
        refreshViewHolder.setLoadingMoreText(loadingMoreText);
        // 设置整个加载更多控件的背景颜色资源 id
        refreshViewHolder.setLoadMoreBackgroundColorRes(loadMoreBackgroundColorRes);
        // 设置整个加载更多控件的背景 drawable 资源 id
        refreshViewHolder.setLoadMoreBackgroundDrawableRes(loadMoreBackgroundDrawableRes);
        // 设置下拉刷新控件的背景颜色资源 id
        refreshViewHolder.setRefreshViewBackgroundColorRes(refreshViewBackgroundColorRes);
        // 设置下拉刷新控件的背景 drawable 资源 id
        refreshViewHolder.setRefreshViewBackgroundDrawableRes(refreshViewBackgroundDrawableRes);
        // 设置自定义头部视图(也可以不用设置)     参数1:自定义头部视图(例如广告位), 参数2:上拉加载更多是否可用
        mRefreshLayout.setCustomHeaderView(mBanner, false);
        // 可选配置  -------------END
    }

    @Override
    public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) {
        // 在这里加载最新数据

        if (mIsNetworkEnabled) {
            // 如果网络可用,则加载网络数据
            new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        Thread.sleep(MainActivity.LOADING_DURATION);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    // 加载完毕后在 UI 线程结束下拉刷新
                    mRefreshLayout.endRefreshing();
                    mDatas.addAll(0, DataEngine.loadNewData());
                    mAdapter.setDatas(mDatas);
                }
            }.execute();
        } else {
            // 网络不可用,结束下拉刷新
            Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
            mRefreshLayout.endRefreshing();
        }
    }

    @Override
    public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) {
        // 在这里加载更多数据,或者更具产品需求实现上拉刷新也可以

        if (mIsNetworkEnabled) {
            // 如果网络可用,则异步加载网络数据,并返回 true,显示正在加载更多
            new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        Thread.sleep(MainActivity.LOADING_DURATION);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    // 加载完毕后在 UI 线程结束加载更多
                    mRefreshLayout.endLoadingMore();
                    mAdapter.addDatas(DataEngine.loadMoreData());
                }
            }.execute();

            return true;
        } else {
            // 网络不可用,返回 false,不显示正在加载更多
            Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    // 通过代码方式控制进入正在刷新状态。应用场景:某些应用在 activity 的 onStart 方法中调用,自动进入正在刷新状态获取最新数据
    public void beginRefreshing() {
        mRefreshLayout.beginRefreshing();
    }

    // 通过代码方式控制进入加载更多状态
    public void beginLoadingMore() {
        mRefreshLayout.beginLoadingMore();
    }

}

更多详细用法请查看 Wiki 或者 Demo

Demo 中使用到了我的另外三个库,欢迎大家 Star 😄

关于我

个人主页 邮箱 BGA 系列开源库 QQ 群 GitHub 喵(专注于 GitHub 等一切与程序员有关的内容)
bingoogolapple.cn [email protected] BGA_CODE_CLUB GitHub喵

打赏支持

如果觉得 BGA 系列开源库对您有用,请随意打赏。如果猿友有打算购买 Lantern,可以使用我的邀请码「YFQ9Q3B」购买,双方都赠送三个月的专业版使用时间。

License

Copyright 2015 bingoogolapple

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

BGAQRCode-Android

QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
C
7,923
star
2

BGABanner-Android

引导界面滑动导航 + 大于等于1页时无限轮播 + 各种切换动画轮播效果
Java
4,165
star
3

BGABadgeView-Android

Android 徽章控件
Java
2,650
star
4

BGASwipeBackLayout-Android

Android Activity 滑动返回。支持微信滑动返回样式、横屏滑动返回、全屏滑动返回
Java
2,313
star
5

BGAPhotoPicker-Android

Android 图片选择、预览、九宫格图片控件、拖拽排序九宫格图片控件
Java
2,237
star
6

BGABaseAdapter-Android

在 AdapterView 和 RecyclerView 中通用的 Adapter 和 ViewHolder。RecyclerView 支持 DataBinding 、多种 Item 类型、添加 Header 和 Footer。RecyclerView 竖直方向通用分割线 BGADivider
Java
659
star
7

BGATransformersTip-Android

Android 通用 PopupWindow,再也不用找 UI 小姐姐切 .9 图片了,大致能为你节省 30 分钟的开发时间
Java
487
star
8

BGASwipeItemLayout-Android

类似 iOS 带弹簧效果的左右滑动控件,可作为 AbsListView 和 RecyclerView 的 item(作为 AbsListView 的 item 时的点击事件参考代码家的 https://github.com/daimajia/AndroidSwipeLayout )
Java
469
star
9

bga_issue_blog

Flutter 或 Vue 全家桶(Vue + VueRouter + Vuex + Axios)抓取 GitHub 上的 Issues,结合 GitHub Pages 搭建个人博客站点,支持 GitHub 登录和评论
Dart
271
star
10

BGAProgressBar-Android

带百分比数字的水平、圆形进度条
Java
255
star
11

BGATitleBar-Android

Android 仿 iOS UINavigationBar 风格的 TitleBar,适用于某些 UI 设计师只出 iOS 效果图的项目
Java
245
star
12

BGAFlowLayout-Android

Android 流式布局,可配置是否将每一行的空白区域平均分配给子控件
Java
203
star
13

BGAUpdate-Android

RxJava + Retrofit 下载新版 apk 文件,RxBus 监听下载进度
Java
195
star
14

AppInit

AppInit 是一款 Android 应用初始化框架,基于组件化的设计思路,功能灵活,使用简单。
Groovy
193
star
15

bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
HTML
86
star
16

BGACamera-Android

Android 相机开发学习笔记,参考 https://www.polarxiong.com/tag/camera
Kotlin
43
star
17

react-native-bga-badge-view

桥接 Android 中的自定义徽章控件到 React Native 的案例
Java
36
star
18

BGAAlertController-Android

仿写从 iOS8 开始支持的 UIAlertController
Java
34
star
19

BGARefreshLayoutDemo

测试 BGARefreshLayout 与 Activity、Fragment、ViewPager 的各种嵌套
Java
30
star
20

BGAWeiBo-Android

调用微博开放API模仿新浪微博Android客户端
Java
29
star
21

bga-back-top-vue

Vue-based back-top component 基于 Vue 2.x 实现的「滚动可滚动组件到顶部」的组件,支持多种自定义属性配置,以及通过 slot 插桩的方式深度定制 BgaBackTop 的内容。整个项目只需要在根组件中添加一次即可
Vue
29
star
22

BGAIndicator-Android

滑动指示器
Java
27
star
23

HarmonyOS-Note

鸿蒙学习笔记
JavaScript
25
star
24

AndroidCustomViewPlayground

Android 自定义控件游乐场
Java
25
star
25

BGAOkVolley-Android

Volley+OkHttp+Gson
Java
24
star
26

Graduation-Design

毕业设计
Java
20
star
27

bga-dart-full-stack-note

Dart 全栈开发学习笔记
JavaScript
18
star
28

BGAImageView-Android

Java
14
star
29

Meiqia-SDK-Android-UE-EC

Java
14
star
30

bga-chrome-plugin-note

Chrome 插件开发学习笔记
JavaScript
13
star
31

MediaNote-Android

Android音视频播放学习笔记
Java
12
star
32

BGAMenu

滑动菜单
Java
11
star
33

BGASelectView-Android

类似 web 开发中的 select 标签实现的级联效果
Java
11
star
34

BGAAnnotation-Android

Android Annotation
Java
9
star
35

XMPPNote-Android

Android平台XMPP学习笔记
Java
8
star
36

Android-Training

2013年android实训
Java
8
star
37

AndroidGameNote

AndroidGameNote
Java
7
star
38

PublishAar

发布Aar到Maven中央仓库和Bintray中
7
star
39

ControlToggleView

控制开关,点击开关后提供回调接口来处理是否执行某项操作
Java
6
star
40

NDKNote-AndroidStudio

AndroidStudio 版的 NDK 学习笔记
C
6
star
41

DataBindingNote

DataBinding学习笔记
Java
6
star
42

OCNote-PartOne

OC学习笔记第一部分
Objective-C
5
star
43

AndroidNote-PartOne

Android学习笔记
Java
5
star
44

RedEnvelope

过年期间自动抢支付宝红包
Java
5
star
45

MaterialDesignSupportNote

MaterialDesignSupportLibrary学习笔记
Java
5
star
46

bga-vite-plugin-crx-hmr

用于开发 Chromium manifest v3 插件的 Vite 插件,主要提供热重载功能,快速更新,高效开发
TypeScript
4
star
47

SwiftNote-PartOne

Swift学习笔记第一部分
Swift
4
star
48

spring-boot-kotlin

Spring Boot Kotlin
JavaScript
3
star
49

plugin-idea

IDEA 插件学习
Kotlin
3
star
50

SwiftNote-PartTwo

Swift学习笔记第二部分
Objective-C
3
star
51

GradlePluginNote

Groovy
3
star
52

AptNote

Java
3
star
53

bga-programmer-assistant-config

本拓展程序为用户提供一个低代码搭建平台,让用户可以通过低代码的方式快速搭建自己的专属新标签页,以及搭建各种自动化任务页面
3
star
54

AlgorithmAndDesignPatternNote

算法和设计模式学习笔记
Java
3
star
55

dsl-note

Groovy、Gradle、Kotlin 学习笔记
Java
3
star
56

bga-rust-full-stack-note

Rust 全栈开发学习笔记
Rust
3
star
57

GradleNote

Gradle学习笔记
Java
2
star
58

bga-js-full-stack-note

JS 全栈开发学习笔记
TypeScript
2
star
59

bga-ss-docker

ShadowSocks Docker 镜像,带 UI 界面
Dockerfile
2
star
60

BGABlogBackup

博客备份
CSS
2
star
61

cc-dxg-2d

基于 Cocos Creator 开发的智能版大西瓜小芝麻
TypeScript
2
star
62

bga-vscode-plugin-note

VS Code 插件开发学习笔记
TypeScript
2
star
63

js-full-stack-demo

JavaScript
1
star
64

xcx-wx-note

微信小程序学习笔记
JavaScript
1
star
65

NodeJSNote

NodeJS学习笔记
JavaScript
1
star
66

ReactNativeNote

ReactNative学习笔记
JavaScript
1
star
67

JSFullStackNote

JSFullStackNote
JavaScript
1
star
68

BGACalendar-Android

Android日历和时间选择控件
Java
1
star
69

bga-ci-docker

CI 相关 Docker 镜像
Dockerfile
1
star
70

BGAChartViewDemo-iOS

iOS自定义图表控件案例
Objective-C
1
star
71

golang-note

Golang 学习笔记
Go
1
star
72

gang-hui-parking-payment

港汇停车缴费
1
star
73

PythonNote

Python 学习笔记
Python
1
star
74

BGAImageLoader-Android

Java
1
star
75

OCNote-PartTwo

OC学习笔记第二部分
Objective-C
1
star
76

taro-note

taro 学习笔记
JavaScript
1
star