{"id":47694578,"url":"https://github.com/zj565061763/compose-wheel-picker","last_synced_at":"2026-04-02T16:18:51.467Z","repository":{"id":45661809,"uuid":"513935048","full_name":"zj565061763/compose-wheel-picker","owner":"zj565061763","description":"Android Compose wheel picker library based on LazyColumn in vertical and LazyRow in horizontal.","archived":false,"fork":false,"pushed_at":"2024-11-27T16:34:07.000Z","size":677,"stargazers_count":94,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-27T17:31:18.257Z","etag":null,"topics":["android","compose","kotlin","wheelpicker","wheelview"],"latest_commit_sha":null,"homepage":"","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/zj565061763.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2022-07-14T14:33:52.000Z","updated_at":"2024-11-27T16:32:31.000Z","dependencies_parsed_at":"2023-12-25T10:26:31.226Z","dependency_job_id":"f1eae222-6bb2-4bee-aa99-dd1b86809123","html_url":"https://github.com/zj565061763/compose-wheel-picker","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/zj565061763/compose-wheel-picker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zj565061763%2Fcompose-wheel-picker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zj565061763%2Fcompose-wheel-picker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zj565061763%2Fcompose-wheel-picker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zj565061763%2Fcompose-wheel-picker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zj565061763","download_url":"https://codeload.github.com/zj565061763/compose-wheel-picker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zj565061763%2Fcompose-wheel-picker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31309832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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","kotlin","wheelpicker","wheelview"],"created_at":"2026-04-02T16:18:51.365Z","updated_at":"2026-04-02T16:18:51.460Z","avatar_url":"https://github.com/zj565061763.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://jitpack.io/v/zj565061763/compose-wheel-picker.svg)](https://jitpack.io/#zj565061763/compose-wheel-picker)\n\n# About\n\nAndroid Compose wheel picker library based on LazyColumn in vertical and LazyRow in horizontal.\n\n# Sample\n\n|                               Default                                |                              Item size                               |                           Unfocused count                            |                            Custom divider                            |                             Custom focus                             |\n|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|\n| \u003cimg src=\"https://thumbsnap.com/i/9MTLo4FX.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/18SBUBHg.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/qH5Z6wL8.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/EyjJoDB9.gif?0714\" width=\"150px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/DhyaDVkH.gif?0714\" width=\"150px\"/\u003e |\n\n|                           Scroll to index                            |                            Observe index                             |                            Custom display                            |                            Reverse layout                            |                              Horizontal                              |\n|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:|\n| \u003cimg src=\"https://thumbsnap.com/i/5juVMWPU.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/6rHShNK4.gif?0714\" width=\"200px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/cLwTSLZC.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/TMtF439g.gif?0714\" width=\"100px\"/\u003e | \u003cimg src=\"https://thumbsnap.com/i/enX2Prc8.gif?0714\" width=\"100px\"/\u003e |\n\n### Default\n\n```kotlin\nFVerticalWheelPicker(\n   modifier = Modifier.width(60.dp),\n   // Specified item count.\n   count = 50,\n) { index -\u003e\n   Text(index.toString())\n}\n```\n\n### Item size\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   // Specified item height.\n   itemHeight = 60.dp,\n) {\n   // ......\n}\n```\n\n### Unfocused count\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   // Specified unfocused count.\n   unfocusedCount = 2,\n) {\n   // ......\n}\n```\n\n### Custom divider\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   focus = {\n      // Custom divider.\n      FWheelPickerFocusVertical(dividerColor = Color.Red, dividerSize = 2.dp)\n   },\n) {\n   // ......\n}\n```\n\n### Custom focus\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   // Custom focus.\n   focus = {\n      Box(\n         modifier = Modifier\n            .fillMaxSize()\n            .border(width = 1.dp, color = Color.Gray)\n      )\n   },\n) {\n   // ......\n}\n```\n\n### Scroll to index\n\n```kotlin\n// Specified initial index.\nval state = rememberFWheelPickerState(10)\nLaunchedEffect(state) {\n   delay(2000)\n   // Scroll to index.\n   state.animateScrollToIndex(20)\n}\n\nFVerticalWheelPicker(\n   // ......\n   // state\n   state = state,\n) {\n   // ......\n}\n```\n\n### Observe index\n\n* `FWheelPickerState.currentIndex` - Index of picker when it is idle.\n* `FWheelPickerState.currentIndexSnapshot` - Index of picker when it is idle or scrolling but not fling.\n\n```kotlin\nval state = rememberFWheelPickerState()\nFVerticalWheelPicker(\n   // ......\n   // state\n   state = state,\n) {\n   // ......\n}\n\n// Observe currentIndex.\nLaunchedEffect(state) {\n   snapshotFlow { state.currentIndex }\n      .collect {\n         Log.i(TAG, \"currentIndex ${state.currentIndex}\")\n      }\n}\n\n// Observe currentIndexSnapshot.\nLaunchedEffect(state) {\n   snapshotFlow { state.currentIndexSnapshot }\n      .collect {\n         Log.i(TAG, \"currentIndexSnapshot ${state.currentIndexSnapshot}\")\n      }\n}\n```\n\n### Custom display\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   // Content display\n   display = { index -\u003e\n      if (state.currentIndexSnapshot == index) {\n         content(index)\n      } else {\n         // Modify content if it is not in focus.\n         Box(\n            modifier = Modifier\n               .rotate(90f)\n               .alpha(0.5f)\n         ) {\n            content(index)\n         }\n      }\n   }\n) {\n   // ......\n}\n```\n\n### Reverse layout\n\n```kotlin\nFVerticalWheelPicker(\n   // ......\n   // Reverse layout.\n   reverseLayout = true,\n) {\n   // ......\n}\n```\n\n### Horizontal\n\n`FHorizontalWheelPicker` is almost the same as `FVerticalWheelPicker`.\n\n```kotlin\nFHorizontalWheelPicker(\n   modifier = Modifier.height(60.dp),\n   // Specified item count.\n   count = 50,\n) { index -\u003e\n   Text(index.toString())\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzj565061763%2Fcompose-wheel-picker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzj565061763%2Fcompose-wheel-picker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzj565061763%2Fcompose-wheel-picker/lists"}