{"id":44394043,"url":"https://github.com/jenly1314/UltraSwipeRefresh","last_synced_at":"2026-02-24T08:01:17.617Z","repository":{"id":210544352,"uuid":"726825340","full_name":"jenly1314/UltraSwipeRefresh","owner":"jenly1314","description":" :surfer: 一个可带来极致体验的Compose刷新组件；支持下拉刷新和上拉加载，可完美替代官方的SwipeRefresh；并且支持的功能更多，可扩展性更强。","archived":false,"fork":false,"pushed_at":"2025-08-31T03:44:37.000Z","size":86557,"stargazers_count":242,"open_issues_count":2,"forks_count":14,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-08-31T05:38:27.855Z","etag":null,"topics":["android","compose","compose-refresh","jetpack","jetpack-compose","kotlin","loadmore","pull-refresh","pull-to-refresh","pullrefresh","pulltorefresh","pulltorefreshview","refresh","refresh-layout","refreshlayout","smartrefresh","smartrefreshlayout","swipe-refresh","swiperefresh","swiperefreshlayout"],"latest_commit_sha":null,"homepage":"https://jenly1314.github.io/UltraSwipeRefresh/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jenly1314.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-12-03T14:14:07.000Z","updated_at":"2025-08-31T03:44:40.000Z","dependencies_parsed_at":"2025-01-19T14:10:37.273Z","dependency_job_id":"fcd68bc0-d365-4db2-8b49-5dafb0579721","html_url":"https://github.com/jenly1314/UltraSwipeRefresh","commit_stats":null,"previous_names":["jenly1314/ultraswiperefresh"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/jenly1314/UltraSwipeRefresh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FUltraSwipeRefresh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FUltraSwipeRefresh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FUltraSwipeRefresh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FUltraSwipeRefresh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jenly1314","download_url":"https://codeload.github.com/jenly1314/UltraSwipeRefresh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FUltraSwipeRefresh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29775768,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T04:54:30.205Z","status":"ssl_error","status_checked_at":"2026-02-24T04:53:58.628Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","compose","compose-refresh","jetpack","jetpack-compose","kotlin","loadmore","pull-refresh","pull-to-refresh","pullrefresh","pulltorefresh","pulltorefreshview","refresh","refresh-layout","refreshlayout","smartrefresh","smartrefreshlayout","swipe-refresh","swiperefresh","swiperefreshlayout"],"created_at":"2026-02-12T03:00:26.085Z","updated_at":"2026-02-24T08:01:17.609Z","avatar_url":"https://github.com/jenly1314.png","language":"Kotlin","readme":"# UltraSwipeRefresh\n\n[![MavenCentral](https://img.shields.io/maven-central/v/com.github.jenly1314.UltraSwipeRefresh/refresh?logo=sonatype)](https://repo1.maven.org/maven2/com/github/jenly1314/UltraSwipeRefresh)\n[![JitPack](https://img.shields.io/jitpack/v/github/jenly1314/UltraSwipeRefresh?logo=jitpack)](https://jitpack.io/#jenly1314/UltraSwipeRefresh)\n[![CI](https://img.shields.io/github/actions/workflow/status/jenly1314/UltraSwipeRefresh/build.yml?logo=github)](https://github.com/jenly1314/UltraSwipeRefresh/actions/workflows/build.yml)\n[![Download](https://img.shields.io/badge/download-APK-brightgreen?logo=github)](https://raw.githubusercontent.com/jenly1314/UltraSwipeRefresh/master/app/release/app-release.apk)\n[![API](https://img.shields.io/badge/API-21%2B-brightgreen?logo=android)](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)\n[![License](https://img.shields.io/github/license/jenly1314/UltraSwipeRefresh?logo=open-source-initiative)](https://opensource.org/licenses/mit)\n\n**UltraSwipeRefresh**：一个可带来极致体验的 **Compose** 刷新组件；支持下拉刷新和上拉加载，可完美替代官方的 **SwipeRefresh**；并且支持的功能更多，可扩展性更强。\n\n\u003e **UltraSwipeRefresh** 在设计之初，主要参考了谷歌官方的 [SwipeRefresh](https://github.com/google/accompanist/tree/v0.36.0/swiperefresh) 和第三方的 [SmartRefreshLayout](https://github.com/scwang90/SmartRefreshLayout) ，在充分借鉴两者优秀设计理念的基础上，致力于打造一个拥有极致体验的 **Compose** 刷新组件。\n\n## 功能特色\n\n- 🌀 **多种滑动模式**：提供`Translate`(平移)、`FixedContent`(固定内容)、`FixedBehind`(固定在背后)、`FixedFront`(固定在前面) 等滑动交互模式，适配各类使用场景。\n- 🎨 **可完全定制UI**：支持通过 `headerIndicator`/`footerIndicator` 完全自定义指示器，满足深度定制需求。\n- ✨ **灵活配置方案**：可自由组合任意滑动模式与指示器样式，轻松实现个性化刷新效果。\n\n## 效果展示\n\n![Image](art/UltraSwipeRefresh.gif)\n\n\u003e 你也可以直接下载 [演示App](https://raw.githubusercontent.com/jenly1314/UltraSwipeRefresh/master/app/release/app-release.apk) 体验效果\n\n## 引入\n\n### Gradle:\n\n1. 在Project的 **build.gradle** 或 **setting.gradle** 中添加远程仓库\n\n    ```gradle\n    repositories {\n        //...\n        mavenCentral()\n    }\n    ```\n\n2. 在Module的 **build.gradle** 中添加依赖项\n\n    ```gradle\n    // 极致体验的Compose刷新组件 (*必须)\n    implementation 'com.github.jenly1314.UltraSwipeRefresh:refresh:1.4.2'\n\n    // 经典样式的指示器 (可选)\n    implementation 'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-classic:1.4.2'\n    // Lottie动画指示器 (可选)\n    implementation 'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-lottie:1.4.2'\n    // 进度条样式的指示器 (可选)\n    implementation 'com.github.jenly1314.UltraSwipeRefresh:refresh-indicator-progress:1.4.2'\n    ```\n\n## 使用\n\n### UltraSwipeRefresh\n\n**Compose** 组件的使用大都比较直观，一般看一下 **Composable** 函数对应的参数说明基本就会使用了。\n\n#### UltraSwipeRefresh参数说明\n\n```kotlin\n/**\n * UltraSwipeRefresh：一个可带来极致体验的Compose刷新组件；支持下拉刷新和上拉加载，可完美替代官方的SwipeRefresh；并且支持的功能更多，可扩展性更强。\n *\n * @param state 状态：主要用于控制和观察[UltraSwipeRefresh]；比如：控制下拉刷新和上拉加载和观察其状态。\n * @param onRefresh 在完成滑动刷新手势时触发调用\n * @param onLoadMore 在完成滑动加载手势时触发调用\n * @param modifier 修饰符：用于装饰或添加Compose UI元素的行为。具体更详细的说明可查看[Modifier]\n * @param headerScrollMode 在进行滑动刷新时Header的滑动模式；具体更详细的样式说明可查看[NestedScrollMode]\n * @param footerScrollMode 在进行滑动加载更多时Footer的滑动模式；具体更详细的样式说明可查看[NestedScrollMode]\n * @param refreshEnabled 是否启用下拉刷新\n * @param loadMoreEnabled 是否启用上拉加载\n * @param refreshTriggerRate 触发滑动刷新的最小滑动比例；比例基于[headerIndicator]的高度；默认为：1\n * @param loadMoreTriggerRate 触发滑动加载更多最小滑动比例；比例基于[footerIndicator]的高度；默认为：1\n * @param headerMaxOffsetRate 向下滑动时[headerIndicator]可滑动的最大偏移比例；比例基于[headerIndicator]的高度；默认为：2\n * @param footerMaxOffsetRate 向上滑动时[footerIndicator]可滑动的最大偏移比例；比例基于[footerIndicator]的高度；默认为：2\n * @param dragMultiplier 触发下拉刷新或上拉加载时的阻力系数；值越小，阻力越大；默认为：0.5\n * @param finishDelayMillis 完成时延时时间；让完成时的中间状态[UltraSwipeRefreshState.isFinishing]停留一会儿，定格的展示提示内容；默认：500毫秒\n * @param vibrationEnabled 是否启用振动，如果启用则当滑动偏移量满足触发刷新或触发加载更多时，会有振动效果；默认为：false\n * @param vibrationMillis 触发刷新或触发加载更多时的振动时长（毫秒）默认：25毫秒\n * @param alwaysScrollable 是否始终可以滚动；当为true时，则会忽略刷新中或加载中的状态限制，始终可以进行滚动；默认为：false\n * @param onCollapseScroll 可选回调，当Header/Footer收起时需要同步调整列表位置以消除视觉回弹时使用\n * @param headerIndicator 下拉刷新时顶部显示的Header指示器\n * @param footerIndicator 上拉加载更多时底部显示的Footer指示器\n * @param contentContainer 内容的父容器，便于统一管理\n * @param content 可进行刷新或加载更多所包含的内容\n */\n```\n\n#### UltraSwipeRefresh使用示例\n\n使用`UltraSwipeRefresh`实现一个经典样式的刷新与加载示例：\n\n```kotlin\n@Composable\nfun UltraSwipeRefreshSample() {\n\n    val state = rememberUltraSwipeRefreshState()\n    var itemCount by remember { mutableIntStateOf(20) }\n    val coroutineScope = rememberCoroutineScope()\n    val lazyListState = rememberLazyListState()\n\n    UltraSwipeRefresh(\n        state = state,\n        onRefresh = {\n            coroutineScope.launch {\n                state.isRefreshing = true\n                // TODO 刷新的逻辑处理，此处的延时只是为了演示效果\n                delay(2000)\n                itemCount = 20\n                state.isRefreshing = false\n            }\n        },\n        onLoadMore = {\n            coroutineScope.launch {\n                state.isLoading = true\n                // TODO 加载更多的逻辑处理，此处的延时只是为了演示效果\n                delay(2000)\n                itemCount += 20\n                state.isLoading = false\n            }\n        },\n        modifier = Modifier.background(color = Color(0x7FEEEEEE)),\n        headerScrollMode = NestedScrollMode.Translate,\n        footerScrollMode = NestedScrollMode.Translate,\n        onCollapseScroll = {\n            // 小于0时表示：由下拉刷新收起时触发的，大于0时表示：由上拉加载收起时触发的\n            if (it \u003e 0) {\n                // 指示器收起时滚动列表位置，消除视觉回弹\n                lazyListState.animateScrollBy(it)\n            }\n        },\n        headerIndicator = {\n            ClassicRefreshHeader(it)\n        },\n        footerIndicator = {\n            ClassicRefreshFooter(it)\n        }\n    ) {\n        LazyColumn(\n            modifier = Modifier.fillMaxSize().background(color = Color.White),\n            state = lazyListState,\n        ) {\n            repeat(itemCount) {\n                item {\n                    Text(\n                        text = \"UltraSwipeRefresh列表Item${it + 1}\",\n                        modifier = Modifier.padding(horizontal = 16.dp, vertical = 10.dp),\n                        color = Color(0xFF333333),\n                        fontSize = 16.sp\n                    )\n                    Divider(\n                        modifier = Modifier.padding(horizontal = 16.dp),\n                        color = Color(0xFFF2F3F6)\n                    )\n                }\n            }\n        }\n    }\n}\n\n```\n\n\u003e 使用小提示：**headerIndicator/footerIndicator** 与 **headerScrollMode/footerScrollMode** 组合使用，以获得最佳滑动体验！\n\n### UltraSwipeRefreshTheme\n\nUltraSwipeRefreshTheme：主要用于统一管理全局默认配置。\n\n\u003e 通常情况下，一个App使用的刷新样式是统一的，如果你需要进行全局统一刷新组件的样式时，可以通过`UltraSwipeRefreshTheme.config`来动态修改`UltraSwipeRefresh`的全局默认配置。\n\n#### UltraSwipeRefreshTheme使用示例\n\n```kotlin\n// 全局设置默认的滑动模式 （建议在Application的onCreate中进行配置）\nUltraSwipeRefreshTheme.config = UltraSwipeRefreshTheme.config.copy(\n   headerScrollMode = NestedScrollMode.Translate,\n   footerScrollMode = NestedScrollMode.Translate,\n)\n```\n\u003e 更多参数配置可查看：`UltraSwipeRefreshTheme.config` 的定义，这里就不一一举例了。\n\n### 指示器样式\n\n这里罗列一下目前 **UltraSwipeRefresh** 所提供的一些Header和Footer指示器样式与示例，以供参考。\n\n| 默认官方样式                                                                                                | 经典样式                                                                                                                                                                                                           |\n|:------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| SwipeRefreshHeader                                                                                    | ClassicRefreshHeader                                                                                                                                                                                           |\n| ![Image](art/SwipeRefreshIndicatorSample.gif)                                                         | ![Image](art/ClassicRefreshIndicatorSample.gif)                                                                                                                                                                |\n| SwipeRefreshFooter                                                                                    | ClassicRefreshFooter                                                                                                                                                                                           |\n| [官方默认的刷新样式示例](app/src/main/java/com/king/ultraswiperefresh/app/sample/SwipeRefreshIndicatorSample.kt) | [经典刷新样式示例](app/src/main/java/com/king/ultraswiperefresh/app/sample/ClassicRefreshIndicatorSample.kt)  /  [经典刷新自动加载示例](app/src/main/java/com/king/ultraswiperefresh/app/sample/ClassicRefreshAutoLoadSample.kt) |\n\n| 进度条样式                                                                                           | Lottie动画样式                                                                                                                            |\n|:-----------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------|\n| ProgressRefreshHeader                                                                                | LottieRefreshHeader                                                                                                                   |\n| ![Image](art/ProgressRefreshIndicatorSample.gif)                                                     | ![Image](art/LottieRefreshIndicatorSample.gif)                                                                                        |\n| ProgressRefreshFooter                                                                                | LottieRefreshFooter                                                                                                                   |\n| [进度条刷新样式示例](app/src/main/java/com/king/ultraswiperefresh/app/sample/ProgressRefreshIndicatorSample.kt) | [Lottie动画刷新样式示例](app/src/main/java/com/king/ultraswiperefresh/app/sample/LottieRefreshIndicatorSample.kt)                                    |\n\n\u003e 如果以上的指示器效果都不满足你的需求，你可以自定义去实现Header和Footer对应的指示器，也可以直接使用Lottie动画样式的指示器，来快速接入任何Lottie动画。\n\n更多使用详情，请查看[app](app)中的源码使用示例或直接查看 [API帮助文档](https://jenly1314.github.io/UltraSwipeRefresh/api/)\n\n## 相关推荐\n\n- [CodeTextField](https://github.com/jenly1314/CodeTextField)一个使用 Compose 实现的验证码输入框。\n- [compose-component](https://github.com/jenly1314/compose-component) 一个Jetpack Compose的组件库；主要提供了一些小组件，便于快速使用。\n- [SuperSwipeRefreshLayout](https://github.com/jenly1314/SuperSwipeRefreshLayout) 是在SwipeRefreshLayout的基础之上扩展修改，让其支持上拉刷新。\n- [SuperSlidingPaneLayout](https://github.com/jenly1314/SuperSlidingPaneLayout) 是在SlidingPaneLayout的基础之上扩展修改，新增几种不同的侧滑效果。\n- [SuperTextView](https://github.com/jenly1314/SuperTextView) 一个在TextView的基础上扩展了几种动画效果的控件。\n- [LoadingView](https://github.com/jenly1314/LoadingView) 一个圆弧加载过渡动画，圆弧个数，大小，弧度，渐变颜色，完全可配。\n- [WaveView](https://github.com/jenly1314/WaveView) 一个水波纹动画控件视图，支持波纹数，波纹振幅，波纹颜色，波纹速度，波纹方向等属性完全可配。\n- [GiftSurfaceView](https://github.com/jenly1314/GiftSurfaceView) 一个适用于直播间送礼物拼图案的动画控件。\n- [FlutteringLayout](https://github.com/jenly1314/FlutteringLayout) 一个适用于直播间点赞桃心飘动效果的控件。\n- [DragPolygonView](https://github.com/jenly1314/DragPolygonView) 一个支持可拖动多边形，支持通过拖拽多边形的角改变其形状的任意多边形控件。\n- [CircleProgressView](https://github.com/jenly1314/CircleProgressView) 一个圆形的进度动画控件，动画效果纵享丝滑。\n- [ArcSeekBar](https://github.com/jenly1314/ArcSeekBar) 一个弧形的拖动条进度控件，配置参数完全可定制化。\n- [DrawBoard](https://github.com/jenly1314/DrawBoard) 一个自定义View实现的画板；方便对图片进行编辑和各种涂鸦相关操作。\n\n\u003c!-- end --\u003e\n\n## 版本日志\n\n#### v1.4.2 ：2025-9-6\n* 优化显示细节（[#38](https://github.com/jenly1314/UltraSwipeRefresh/issues/38)）\n\n#### [查看更多版本日志](CHANGELOG.md)\n\n---\n\n![footer](https://jenly1314.github.io/page/footer.svg)\n","funding_links":[],"categories":["Kotlin"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2FUltraSwipeRefresh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjenly1314%2FUltraSwipeRefresh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2FUltraSwipeRefresh/lists"}