{"id":13645297,"url":"https://github.com/weidongjian/androidWheelView","last_synced_at":"2025-04-21T13:32:42.397Z","repository":{"id":60010608,"uuid":"41836044","full_name":"weidongjian/androidWheelView","owner":"weidongjian","description":"仿照iOS的滚轮控件，从请吃饭apk反编译出来的","archived":false,"fork":false,"pushed_at":"2023-06-29T02:02:36.000Z","size":4352,"stargazers_count":1522,"open_issues_count":20,"forks_count":267,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-08T02:41:43.586Z","etag":null,"topics":["android","android-library"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weidongjian.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}},"created_at":"2015-09-03T01:17:34.000Z","updated_at":"2025-03-06T08:33:25.000Z","dependencies_parsed_at":"2024-01-14T11:19:53.964Z","dependency_job_id":"cce7f61d-d053-4864-8c26-98c9bdf8a9aa","html_url":"https://github.com/weidongjian/androidWheelView","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weidongjian%2FandroidWheelView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weidongjian%2FandroidWheelView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weidongjian%2FandroidWheelView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weidongjian%2FandroidWheelView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weidongjian","download_url":"https://codeload.github.com/weidongjian/androidWheelView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250064851,"owners_count":21368981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","android-library"],"created_at":"2024-08-02T01:02:33.168Z","updated_at":"2025-04-21T13:32:42.385Z","avatar_url":"https://github.com/weidongjian.png","language":"Java","readme":"# androidWheelView\n仿照iOS的滚轮控件，从请吃饭apk反编译出来的\n\n具体的请查看这个博客：http://www.jianshu.com/p/fa7adfa90c68\n\n由于Jcenter库停止维护，现迁移到jitpack，依赖如下\n### 在根目录的build.gradle增加jitpack\n```gradle\nallprojects {\n\trepositories {\n\t\t...\n\t\tmaven { url 'https://jitpack.io' }\n\t}\n}\n```\n\n### 添加依赖\n```gradle\ndependencies {\n    implementation 'com.github.weidongjian:androidWheelView:1.0.0'\n}\n```\n\n\n\n效果图如下：\n\n![DemoView](/photo/1625735942774356.gif)\n\n\n\n### 常见问题\n\n1. 设置初始位置：调用`setInitPosition()`，不是`setCurrentPosition()`。\n\n### 更新历史\n**版本号：1.0.0 更新时间：2021.7.08**\n\n增加对无3D效果的配置：app:awv_isCurve=\"false\"\n\n**版本号：0.9.1 更新时间：2021.7.06**\n\n修复setCurrentPosition后，对应的位置不会回调的异常\n\n**版本号：0.2.2 更新时间：2019.10.30**\n\n修复设置当前位置为0无效的异常\n\n**版本号：0.2.1 更新时间：2019.6.25**\n\n修复一波bug\n\n**版本号：0.1.2   更新时间：2017.3.25**\n\n1. 适配`setCurrentPosition(0)`的场景\n2. 适配嵌套在`ScrollerView`滑动冲突\n3. 适配在`dialog`中显示\n\n\n\n## 2016-12-30：各种性能效果做了很大的更新\n\n同时，提供各种参数接口，包括文本大小，显示数量，控件颜色等各种参数\n#### Description of Attributes\n\n|      Attributes       | Format  |  Default   |    Description     |\n| :-------------------: | :-----: | :--------: | :----------------: |\n|     awv_textsize      | integer |     15     |      textsize      |\n|     awv_lineSpace     |  float  |    2.0f    |     line space     |\n|  awv_centerTextColor  | integer | oxff313131 | center text color  |\n|  awv_outerTextColor   | integer | 0xffafafaf |  outer text color  |\n| awv_dividerTextColor  | integer | oxff313131 | center text color  |\n| awv_itemsVisibleCount | integer |     9      | visible item count |\n|      awv_isLoop       | boolean |    true    |    is loop mode    |\n\n![LoopView](/photo/circle.jpg)\n\n## 滚动效果类似一个圆柱 ##\n### 绘制 ###\n\n在onMeasure方法中计算控件宽和高以及初始化画笔\n\nitemHeight = lineSpacingMultiplier * maxTextHeight\n\n圆柱半圆周为itemHeight*(itemCount - 1)\n\n计算出圆柱直径即为控件高度\n\n在onTouchEvent方法中计算圆柱滚动距离totalScrollY\n\n### 在onDraw方法中绘制控件 ###\n\n计算滚动了多少个条目change = (int) ((float) totalScrollY / itemHeight);\n\n计算当前条目位置preCurrentIndex（处理超出边界的情况）\n计算滚动超出条目的位移：\nint j2 = (int) ((float) totalScrollY % itemHeight);\n\n绘制各个条目：\n\n计算条目弧度radian\n\n计算图纸canvas偏移量\n\n图中的弧度标错了，应该标它的补角，那样感觉不好理解，大家自行脑补一下\n\nh2也标错了，画图的时候忘记考虑空白区域了，h2应该是文字高度的sin值\n\ndouble h1 = Math.cos(radian) * (double) radius;\n\ndouble h2 = (Math.sin(radian) * (double) maxTextHeight) / 2D)\n\nint translateY = (int) ((double) radius h1 h2;\n\n图纸延Y方向缩放，值为弧度radian的sin值（这样出来的效果就感觉是个圆柱）\n\n### 最后分不同情况绘制各个条目 ###\n1. 偏移量translateY y值小于第一条线firstLineY y值的并且偏移量translateY+maxTextHeight大于第一条线y值小于第一条线firstLineY y值的（即第一条线穿过该条目文字）\n2. 条目文字穿过第二条线的情况\n3. 条目刚好在两条线中间的\n4. 其他情况\n\nonTouchEvent方法，当手离开控件时开始平滑滚动控件\n\nLoopViewGestureListener处理手势，当按下时取消所有的滚动，当滑行时，平滑滚动\n\n平滑滚动用定时器ScheduledExecutorService来处理\n\n哪里写的不对的多多指正。\n","funding_links":[],"categories":["WheelView"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweidongjian%2FandroidWheelView","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweidongjian%2FandroidWheelView","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweidongjian%2FandroidWheelView/lists"}