Android智能下拉刷新框架-SmartRefreshLayout

网友投稿 1746 2022-10-21

Android智能下拉刷新框架-SmartRefreshLayout

Android智能下拉刷新框架-SmartRefreshLayout

Android智能下拉刷新框架-SmartRefreshLayout

正如名字所说,这是一个“聪明”或者说“智能”的下拉刷新布局,由于它的“智能”,他不只是如其他的刷新布局所说的支持所有的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

- APK-Demo

项目演示

风格演示

上面这两个是我自己实现的Header,设计来自下面两个网址:Refresh-your-delivery,Dropbox-Refresh

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

整理来自:TwinklingRefreshLayout,Pull Down To Refresh

整理来自:FlyRefresh,ClassicsHeader

整理来自:Yalantis/Phoenix,Yalantis/Taurus

整理来自:FunGame/BattleCity,FunGame/HitBlock

整理来自:WaveSwipeRefreshLayout,MaterialHeader

整理来自:Ultra-Pull-To-Refresh,WaterDrop

看到这么多炫酷的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

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布局文件指定

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

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

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
srlPrimaryColorcolor主题颜色
srlAccentColorcolor强调颜色
srlReboundDurationinteger释放后回弹动画时长
srlHeaderHeightdimensionHeader的标准高度
srlFooterHeightdimensionFooter的标准高度
srlDragRatefloat显示拖动高度/真实拖动高度(默认0.5,阻尼效果)
srlHeaderMaxDragRatefloatHeader最大拖动高度/Header标准高度(默认2,要求>=1)
srlFooterMaxDragRatefloatFooter最大拖动高度/Footer标准高度(默认2,要求>=1)
srlEnableRefreshboolean是否开启下拉刷新功能(默认true)
srlEnableLoadmoreboolean是否开启加上拉加载功能(默认true)
srlEnableHeaderTranslationContentboolean拖动Header的时候是否同时拖动内容(默认true)
srlEnableFooterTranslationContentboolean拖动Footer的时候是否同时拖动内容(默认true)
srlEnablePreviewInEditModeboolean是否在编辑模式时显示预览效果(默认true)
srlDisableContentWhenRefreshboolean是否在刷新的时候禁止内容的一切手势操作(默认false)
srlDisableContentWhenLoadingboolean是否在加载的时候禁止内容的一切手势操作(默认false)

方法 Method

名称-name格式-format描述-description
setPrimaryColorscolors主题\强调颜色
setPrimaryColorsIdcolors主题\强调颜色资源Id
setReboundDurationinteger释放后回弹动画时长
setHeaderHeightdimensionHeader的标准高度(px/dp 两个版本)
setFooterHeightdimensionFooter的标准高度(px/dp 两个版本)
setDragRatefloat显示拖动高度/真实拖动高度(默认0.5,阻尼效果)
setHeaderMaxDragRatefloatHeader最大拖动高度/Header标准高度(默认2,要求>=1)
setFooterMaxDragRatefloatFooter最大拖动高度/Footer标准高度(默认2,要求>=1)
setEnableRefreshboolean是否开启下拉刷新功能(默认true)
setEnableLoadmoreboolean是否开启加上拉加载功能(默认true)
setEnableHeaderTranslationContentboolean拖动Header的时候是否同时拖动内容(默认true)
setEnableFooterTranslationContentboolean拖动Footer的时候是否同时拖动内容(默认true)
setEnableAutoLoadmoreboolean是否监听列表滚动到底部时触发加载事件
setDisableContentWhenRefreshboolean是否在刷新的时候禁止内容的一切手势操作(默认false)
setDisableContentWhenLoadingboolean是否在加载的时候禁止内容的一切手势操作(默认false)
setReboundInterpolatorInterpolator设置回弹动画的插值器
setRefreshHeaderRefreshHeader设置指定的Header
setRefreshFooterRefreshFooter设置指定的Footer
setOnRefreshListenerOnRefreshListener设置刷新-
setOnLoadmoreListenerOnLoadmoreListener设置加载-
setOnRefreshLoadmoreListenerOnRefreshLoadmoreListener同时设置上面两个-
setOnMultiPurposeListenerOnMultiPurposeListener设置多功能-
setLoadmoreFinishedboolean设置全部数据加载完成,之后不会触发加载事件
finishRefresh(int delayed)完成刷新,结束刷新动画
finishLoadmore(int delayed)完成加载,结束加载动画
getRefreshHeaderRefreshHeader获取Header
getRefreshFooterRefreshFooter获取Footer
getStateRefreshState获取当前状态
isRefreshingboolean是否正在刷新
isLoadingboolean是否正在加载
autoRefresh(int delayed)触发自动刷新
autoLoadmore(int delayed)触发自动加载

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:「企业架构」什么是TOGAF?完整的介绍
下一篇:「应用架构」TOGAF建模:应用程序迁移图
相关文章

 发表评论

暂时没有评论,来抢沙发吧~