android 动态下拉框架,GitHub - jiangchunyu/SmartRefreshLayout: Android智能下拉刷新框架,支持越界回弹,集成了几十种炫酷的Header和 Foot...

Android智能下拉刷新框架-SmartRefreshLayout

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d417061636865253230322d677265656e2e73766768747470733a2f2f6170692e62696e747261792e636f6d2f7061636b616765732f736377616e6739302f6d6176656e2f536d617274526566726573684c61796f75742f696d616765732f646f776e6c6f61642e737667png_minsdkapi.png

正如名字所说,这是一个“聪明”或者说“智能”的下拉刷新布局,由于它的“智能”,他不只是如其他的刷新布局所说的支持所有的View,还支持多层嵌套的视图结构。

除了“聪明”之外,SmartRefreshLayout还具备了很多的特点。它继承至ViewGroup 而不是其他的Layout,提高了性能。

吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,现在非常流行的 TwinklingRefreshLayout 、android-Ultra-Pull-To-Refresh。还集成了各种炫酷的 Header 和 Footer。

SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。

特点功能:

支持所有的 View(AbsListView、RecyclerView、WebView....View) 和多层嵌套的 Layout(详细)

支持自定义并且已经集成了很多炫酷的 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)

传送门

Demo

项目演示

1d85d99c88c53b74b1e7f65a5a47949b.png0c6bf5704918741c61a92b0a87c6852f.png

4893ca46fb600bacbab9bd9f375f73a9.pngc3f178cdf5fea59683c9b2659fcf030a.gif

风格演示

0b0e1bdb0d89893c9eea64a791ef7e33.gifa6abb1418de1cee395e09699cf363955.gif

下面的Header是我把github上其他优秀的Header进行的整理和集合还有优化:

e834cae87076ff1875c12660506596a4.gifgif_Circle.gif

5d0937250d9b4308f1837c49bb933c00.gifd7a9f6ac0fb7ca8bca61b6cbc284825c.gif

cc58891e2c58435692d800cceaa76f11.gif0ebc97abb68f10b3ac6c086c19c817ae.gif

9831b90118c58e83bcbe940df578b00c.gifgif_HitBlock.gif

8e40f05bc644983cbaaf17cd4466477b.gif42fe3e063e6f06202247dc95f1029d97.gif

fa611523501be8c6bfdea14bc0d88bc3.gif3a613446717a70e201689e43ff4316c5.gif

看到这么多炫酷的Header,是不是觉得很棒?这时你或许会担心这么多的Header集成在一起,但是平时只会用到一个,是不是要引入很多无用的代码和资源?

请放心,我已经把刷新布局分成三个包啦,用到的时候自行引用就可以啦!

SmartRefreshLayout 刷新布局核心实现,自带ClassicsHeader(经典)、BezierRadarHeader(贝塞尔雷达)两个 Header.

SmartRefreshHeader 各种Header的集成,除了Layout自带的Header,其他都在这个包中.

SmartRefreshFooter 各种Footer的集成,除了Layout自带的Footer,其他都在这个包中.

简单用例

1.在 buld.gradle 中添加依赖

compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.1'

compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.1'//如果使用了特殊的Header

2.在XML布局文件中添加 SmartRefreshLayout

android:id="@+id/refreshLayout"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/recyclerview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:overScrollMode="never"

android:background="#fff" />

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

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);

refreshLayout.setOnRefreshListener(new OnRefreshListener() {

@Override

public void onRefresh(RefreshLayout refreshlayout) {

refreshlayout.finishRefresh(2000);

}

});

refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {

@Override

public void onLoadmore(SmartRefreshLayout refreshlayout) {

refreshlayout.finishLoadmore(2000);

}

});

使用指定的 Header 和 Footer

1.方法一 全局设置

//设置全局的Header构建器

SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {

@Override

public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {

return new ClassicsHeader(context);//指定为经典Header,默认是 贝塞尔雷达Header

}

});

//设置全局的Footer构建器

SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {

@Override

public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {

return new ClassicsFooter(context);//指定为经典Footer,默认是 BallPulseFooter

}

});

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

2.方法二 XML布局文件指定

xmlns:app="http://schemas.android.com/apk/res-auto"

android:id="@+id/smartLayout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#444444"

app:srlPrimaryColor="#444444"

app:srlAccentColor="@android:color/white"

app:srlEnablePreviewInEditMode="true">

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:srlClassicsSpinnerStyle="FixedBehind"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="@dimen/padding_common"

android:background="@android:color/white"

android:text="@string/description_define_in_xml"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:srlClassicsSpinnerStyle="FixedBehind"/>

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

55dc4cedb115f835efee0a839593d97d.png

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

3.方法三 Java代码设置

final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.smartLayout);

//设置 Header 为 Material风格

refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));

//设置 Footer 为 球脉冲

refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

属性 Attributes

名称-name

格式-format

描述-description

srlPrimaryColor

color

主题颜色

srlAccentColor

color

强调颜色

srlReboundDuration

integer

释放后回弹动画时长

srlHeaderHeight

dimension

Header的标准高度

srlFooterHeight

dimension

Footer的标准高度

srlDragRate

float

显示拖动高度/真实拖动高度(默认0.5,阻尼效果)

srlHeaderMaxDragRate

float

Header最大拖动高度/Header标准高度(默认2,要求>=1)

srlFooterMaxDragRate

float

Footer最大拖动高度/Footer标准高度(默认2,要求>=1)

srlEnableRefresh

boolean

是否开启下拉刷新功能(默认true)

srlEnableLoadmore

boolean

是否开启加上拉加载功能(默认true)

srlEnableHeaderTranslationContent

boolean

拖动Header的时候是否同时拖动内容(默认true)

srlEnableFooterTranslationContent

boolean

拖动Footer的时候是否同时拖动内容(默认true)

srlEnablePreviewInEditMode

boolean

是否在编辑模式时显示预览效果(默认true)

srlDisableContentWhenRefresh

boolean

是否在刷新的时候禁止内容的一切手势操作(默认false)

srlDisableContentWhenLoading

boolean

是否在加载的时候禁止内容的一切手势操作(默认false)

方法 Method

名称-name

格式-format

描述-description

setPrimaryColors

colors

主题\强调颜色

setPrimaryColorsId

colors

主题\强调颜色资源Id

setReboundDuration

integer

释放后回弹动画时长

setHeaderHeight

dimension

Header的标准高度(px/dp 两个版本)

setFooterHeight

dimension

Footer的标准高度(px/dp 两个版本)

setDragRate

float

显示拖动高度/真实拖动高度(默认0.5,阻尼效果)

setHeaderMaxDragRate

float

Header最大拖动高度/Header标准高度(默认2,要求>=1)

setFooterMaxDragRate

float

Footer最大拖动高度/Footer标准高度(默认2,要求>=1)

setEnableRefresh

boolean

是否开启下拉刷新功能(默认true)

setEnableLoadmore

boolean

是否开启加上拉加载功能(默认true)

setEnableHeaderTranslationContent

boolean

拖动Header的时候是否同时拖动内容(默认true)

setEnableFooterTranslationContent

boolean

拖动Footer的时候是否同时拖动内容(默认true)

setEnableAutoLoadmore

boolean

是否监听列表滚动到底部时触发加载事件

setDisableContentWhenRefresh

boolean

是否在刷新的时候禁止内容的一切手势操作(默认false)

setDisableContentWhenLoading

boolean

是否在加载的时候禁止内容的一切手势操作(默认false)

setReboundInterpolator

Interpolator

设置回弹动画的插值器

setRefreshHeader

RefreshHeader

设置指定的Header

setRefreshFooter

RefreshFooter

设置指定的Footer

setOnRefreshListener

OnRefreshListener

设置刷新监听器

setOnLoadmoreListener

OnLoadmoreListener

设置加载监听器

setOnRefreshLoadmoreListener

OnRefreshLoadmoreListener

同时设置上面两个监听器

setOnMultiPurposeListener

OnMultiPurposeListener

设置多功能监听器

setLoadmoreFinished

boolean

设置全部数据加载完成,之后不会触发加载事件

finishRefresh

(int delayed)

完成刷新,结束刷新动画

finishLoadmore

(int delayed)

完成加载,结束加载动画

getRefreshHeader

RefreshHeader

获取Header

getRefreshFooter

RefreshFooter

获取Footer

getState

RefreshState

获取当前状态

isRefreshing

boolean

是否正在刷新

isLoading

boolean

是否正在加载

autoRefresh

(int delayed)

触发自动刷新

autoLoadmore

(int delayed)

触发自动加载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值