- Notifications
You must be signed in to change notification settings - Fork11
🏄 一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。
License
jenly1314/UltraSwipeRefresh
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
UltraSwipeRefresh:一个可带来极致体验的Compose 刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。
UltraSwipeRefresh 的设计之初,主要参考了谷歌官方的SwipeRefresh 和第三方的SmartRefreshLayout ,吸取了其优秀的设计思想;致力于打造一个极致体验的Compose 刷新组件。
这里简单的概括下UltraSwipeRefresh 主要的一些功能特色:刷新指示器支持多种滑动方式:平移、固定内容、固定在背后、固定在前面;headerIndicator 和footerIndicator 可任意定制,并且Header 和Footer 的样式与滑动模式可随意组合。
你也可以直接下载演示App 体验效果
在Project的build.gradle 或setting.gradle 中添加远程仓库
repositories {//... mavenCentral()}
在Module的build.gradle 里面添加引入依赖项
// 极致体验的Compose刷新组件 (*必须)implementation'com.github.jenly1314.UltraSwipeRefresh:refresh:1.3.1'// 经典样式的指示器 (可选)implementation'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-classic:1.3.1'// Lottie动画指示器 (可选)implementation'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-lottie:1.3.1'// 进度条样式的指示器 (可选)implementation'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-progress:1.3.1'
Compose 组件的使用大都比较直观,一般看一下Composable 函数对应的参数说明基本就会使用了。
/** * UltraSwipeRefresh:一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。 * * @param state 状态:主要用于控制和观察[UltraSwipeRefresh];比如:控制下拉刷新和上拉加载和观察其状态。 * @param onRefresh 在完成滑动刷新手势时触发调用 * @param onLoadMore 在完成滑动加载手势时触发调用 * @param modifier 修饰符:用于装饰或添加Compose UI元素的行为。具体更详细的说明可查看[Modifier] * @param headerScrollMode 在进行滑动刷新时Header的滑动模式;具体更详细的样式说明可查看[NestedScrollMode] * @param footerScrollMode 在进行滑动加载更多时Footer的滑动模式;具体更详细的样式说明可查看[NestedScrollMode] * @param refreshEnabled 是否启用下拉刷新 * @param loadMoreEnabled 是否启用上拉加载 * @param refreshTriggerRate 触发滑动刷新的最小滑动比例;比例基于[headerIndicator]的高度;默认为:1 * @param loadMoreTriggerRate 触发滑动加载更多最小滑动比例;比例基于[footerIndicator]的高度;默认为:1 * @param headerMaxOffsetRate 向下滑动时[headerIndicator]可滑动的最大偏移比例;比例基于[headerIndicator]的高度;默认为:2 * @param footerMaxOffsetRate 向上滑动时[footerIndicator]可滑动的最大偏移比例;比例基于[footerIndicator]的高度;默认为:2 * @param dragMultiplier 触发下拉刷新或上拉加载时的阻力系数;值越小,阻力越大;默认为:0.5 * @param finishDelayMillis 完成时延时时间;让完成时的中间状态[UltraSwipeRefreshState.isFinishing]停留一会儿,定格的展示提示内容;默认:500毫秒 * @param vibrateEnabled 是否启用振动,如果启用则当滑动偏移量满足触发刷新或触发加载更多时,会有振动效果;默认为:false * @param alwaysScrollable 是否始终可以滚动;当为true时,则会忽略刷新中或加载中的状态限制,始终可以进行滚动;默认为:false * @param headerIndicator 下拉刷新时顶部显示的Header指示器 * @param footerIndicator 上拉加载更多时底部显示的Footer指示器 * @param contentContainer 内容的父容器,便于统一管理 * @param content 可进行刷新或加载更多所包含的内容*/
比如:使用UltraSwipeRefresh
实现一个经典样式的刷新与加载示例:
@ComposablefunUltraSwipeRefreshSample() {val state= rememberUltraSwipeRefreshState()var itemCount by remember { mutableIntStateOf(20) }val coroutineScope= rememberCoroutineScope()UltraSwipeRefresh( state= state, onRefresh= { coroutineScope.launch { state.isRefreshing=true// TODO 刷新的逻辑处理,此处的延时只是为了演示效果 delay(2000) itemCount=20 state.isRefreshing=false } }, onLoadMore= { coroutineScope.launch { state.isLoading=true// TODO 加载更多的逻辑处理,此处的延时只是为了演示效果 delay(2000) itemCount+=20 state.isLoading=false } }, modifier=Modifier.background(color=Color(0x7FEEEEEE)), headerScrollMode=NestedScrollMode.Translate, footerScrollMode=NestedScrollMode.Translate, headerIndicator= {ClassicRefreshHeader(it) }, footerIndicator= {ClassicRefreshFooter(it) } ) {LazyColumn(Modifier.background(color=Color.White)) { repeat(itemCount) { item {Text( text="UltraSwipeRefresh列表Item${it+1}", modifier=Modifier.padding(horizontal=16.dp, vertical=10.dp), color=Color(0xFF333333), fontSize=16.sp )Divider( modifier=Modifier.padding(horizontal=16.dp), color=Color(0xFFF2F3F6) ) } } } }}
使用小提示:headerIndicator/footerIndicator 与headerScrollMode/footerScrollMode 组合使用才更配哦。
UltraSwipeRefreshTheme:主要用于统一管理全局默认配置。
通常情况下,一个App使用的刷新样式是统一的,如果你需要进行全局统一刷新组件的样式时,可以通过
UltraSwipeRefreshTheme.config
来动态修改UltraSwipeRefresh
的全局默认配置。
// 全局设置默认的滑动模式 (建议在Application的onCreate中进行配置)UltraSwipeRefreshTheme.config=UltraSwipeRefreshTheme.config.copy( headerScrollMode=NestedScrollMode.Translate, footerScrollMode=NestedScrollMode.Translate,)
更多参数配置可查看:
UltraSwipeRefreshTheme.config
的定义,这里就不一一举例了。
这里罗列一下目前UltraSwipeRefresh 所提供的一些Header和Footer指示器样式与示例,以供参考。
默认官方样式 | 经典样式 |
---|---|
SwipeRefreshHeader | ClassicRefreshHeader |
![]() | ![]() |
SwipeRefreshFooter | ClassicRefreshFooter |
官方默认的刷新样式示例 | 经典刷新样式示例 /经典刷新自动加载示例 |
进度条样式 | Lottie动画样式 |
---|---|
ProgressRefreshHeader | LottieRefreshHeader |
![]() | ![]() |
ProgressRefreshFooter | LottieRefreshFooter |
进度条刷新样式示例 | Lottie动画刷新样式示例 |
如果以上的指示器效果都不满足你的需求,你可以自定义去实现Header和Footer的指示器,也可以直接使用Lottie动画样式的指示器,来快速接入任何Lottie动画。
更多使用详情,请查看app中的源码使用示例或直接查看API帮助文档
- CodeTextField一个使用 Compose 实现的验证码输入框。
- compose-component 一个Jetpack Compose的组件库;主要提供了一些小组件,便于快速使用。
- 修复BUG:快速滑动时,出现收起动画不执行的问题。 (#21)
如果您喜欢UltraSwipeRefresh,或感觉UltraSwipeRefresh帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 😃
您也可以扫描下面的二维码,请作者喝杯咖啡 ☕
我的博客 | GitHub | Gitee | CSDN | 博客园 |
---|---|---|---|---|
Jenly's Blog | jenly1314 | jenly1314 | jenly121 | jenly |
微信公众号 | Gmail邮箱 | QQ邮箱 | QQ群 | QQ群 |
---|---|---|---|---|
Jenly666 | jenly1314 | jenly1314 | 20867961 | 64020761 |
About
🏄 一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。