洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
1928
2022-10-21
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 |
---|---|---|
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) | 触发自动加载 |
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~