Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🏄 一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。

License

NotificationsYou must be signed in to change notification settings

jenly1314/UltraSwipeRefresh

Repository files navigation

DownloadMavenCentralJitPackCircleCIAPILicense

UltraSwipeRefresh:一个可带来极致体验的Compose 刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。

UltraSwipeRefresh 的设计之初,主要参考了谷歌官方的SwipeRefresh 和第三方的SmartRefreshLayout ,吸取了其优秀的设计思想;致力于打造一个极致体验的Compose 刷新组件。

这里简单的概括下UltraSwipeRefresh 主要的一些功能特色:刷新指示器支持多种滑动方式:平移、固定内容、固定在背后、固定在前面;headerIndicatorfooterIndicator 可任意定制,并且HeaderFooter 的样式与滑动模式可随意组合。

Gif 展示

Image

你也可以直接下载演示App 体验效果

引入

Gradle:

  1. 在Project的build.gradlesetting.gradle 中添加远程仓库

    repositories {//...    mavenCentral()}
  2. 在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'

使用

UltraSwipeRefresh

Compose 组件的使用大都比较直观,一般看一下Composable 函数对应的参数说明基本就会使用了。

UltraSwipeRefresh参数说明

/** * 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使用示例

比如:使用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/footerIndicatorheaderScrollMode/footerScrollMode 组合使用才更配哦。

UltraSwipeRefreshTheme(v1.1.0新增)

UltraSwipeRefreshTheme:主要用于统一管理全局默认配置。

通常情况下,一个App使用的刷新样式是统一的,如果你需要进行全局统一刷新组件的样式时,可以通过UltraSwipeRefreshTheme.config来动态修改UltraSwipeRefresh的全局默认配置。

UltraSwipeRefreshTheme使用示例

// 全局设置默认的滑动模式 (建议在Application的onCreate中进行配置)UltraSwipeRefreshTheme.config=UltraSwipeRefreshTheme.config.copy(   headerScrollMode=NestedScrollMode.Translate,   footerScrollMode=NestedScrollMode.Translate,)

更多参数配置可查看:UltraSwipeRefreshTheme.config 的定义,这里就不一一举例了。

指示器样式

这里罗列一下目前UltraSwipeRefresh 所提供的一些Header和Footer指示器样式与示例,以供参考。

默认官方样式经典样式
SwipeRefreshHeaderClassicRefreshHeader
ImageImage
SwipeRefreshFooterClassicRefreshFooter
官方默认的刷新样式示例经典刷新样式示例 /经典刷新自动加载示例
进度条样式Lottie动画样式
ProgressRefreshHeaderLottieRefreshHeader
ImageImage
ProgressRefreshFooterLottieRefreshFooter
进度条刷新样式示例Lottie动画刷新样式示例

如果以上的指示器效果都不满足你的需求,你可以自定义去实现Header和Footer的指示器,也可以直接使用Lottie动画样式的指示器,来快速接入任何Lottie动画。

更多使用详情,请查看app中的源码使用示例或直接查看API帮助文档

相关推荐

  • CodeTextField一个使用 Compose 实现的验证码输入框。
  • compose-component 一个Jetpack Compose的组件库;主要提供了一些小组件,便于快速使用。

版本日志

v1.3.1 :2024-12-23

  • 修复BUG:快速滑动时,出现收起动画不执行的问题。 (#21

赞赏

如果您喜欢UltraSwipeRefresh,或感觉UltraSwipeRefresh帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 😃

您也可以扫描下面的二维码,请作者喝杯咖啡 ☕

关于我

我的博客GitHubGiteeCSDN博客园
Jenly's Blogjenly1314jenly1314jenly121jenly

联系我

微信公众号Gmail邮箱QQ邮箱QQ群QQ群
Jenly666jenly1314jenly13142086796164020761

[8]ページ先頭

©2009-2025 Movatter.jp