# QSRefreshLayout
**Repository Path**: sakaue/QSRefreshLayout
## Basic Information
- **Project Name**: QSRefreshLayout
- **Description**: 安卓上下拉刷新框架
- **Primary Language**: Android
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2020-11-28
- **Last Updated**: 2022-08-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# QSRefreshLayout



扫码 [demo.apk](https://github.com/tohodog/QSRefreshLayout/raw/master/source/qsrefresh.apk) 下载
安卓上下拉框架
====
* 刷新view模块化,可自由更换扩展,head foot可通用
* 轻松实现各种刷新效果,不用自己处理触摸事件
* 支持任意可滑动的控件
* 更多效果更新中...
Gradle
```
allprojects {
repositories {
maven {
url "https://jitpack.io"
}
}
}
dependencies {
implementation 'com.github.tohodog:QSRefreshLayout:1.1.3'
}
```
框架内置4个刷新view
CircleImageView 小圆球
BarRefreshView 变色的细条
IOSRefreshView ios上的一款刷新view
XMLRefreshView 就是那款经典的上下拉刷新
其他的饿了么京东等均在demo里
## XML
```
```
## JAVA
```
QSRefreshLayout qsRefreshLayout = (QSRefreshLayout) findViewById(R.id.qs);
//XML写了 这里就不用设置
//qsRefreshLayout.setHeadRefreshView(new CircleImageView(this));
//qsRefreshLayout.setFootRefreshView(new BarRefreshView(this));
qsRefreshLayout.enterHeadRefreshing(true);
qsRefreshLayout.setRefreshListener(new QSRefreshLayout.RefreshListener() {
@Override
public void changeStatus(boolean isHead, int status) {
if (status == QSRefreshLayout.STATUS_REFRESHING) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
qsRefreshLayout.refreshComplete();
}
}, 3000);
}
}
});
//refreshview setting
CircleImageView circleImageView= (CircleImageView) qsRefreshLayout.getHeadRefreshView();
circleImageView.setColorScheme(R.color.xxx,...);
```
## DIY
实现IRefreshView接口
[CSDN_BLOG](http://blog.csdn.net/SakaueNachi/article/details/76536112)
```
View getView();
void updateStatus(int status);//更新刷新状态
void updateProgress(float progress);//刷新进度 0 ~ 1(触发刷新)~ 更大
boolean isBringToFront();//是否view放在顶层
float dragRate();//滑动速度控制
int triggerDistance();//触发刷新的距离 [实际触摸距离*dragRate()>triggerDistance() 触发刷新
int maxDistance();//最大滑动距离 <=0不限制
int getThisViewOffset(int offset);//根据触摸位移 确定该view的位移 大于0=headview 小于0=footview
int getTargetOffset(int offset);//根据触摸位移 确定滚动view的位移 大于0=headview 小于0=footview
int completeAnimaDuration();//完成刷新后到消失 的动画时间, <=0使用默认时间
void isHeadView(boolean isHead);//是否顶部刷新view
```