仿照iOS的滚轮控件,从请吃饭apk反编译出来的
具体的请查看这个博客:http://www.jianshu.com/p/e2b3118d8ca4
在onMeasure方法中计算控件宽和高以及初始化画笔
itemHeight = lineSpacingMultiplier * maxTextHeight
圆柱半圆周为itemHeight*(itemCount - 1)
计算出圆柱直径即为控件高度
在onTouchEvent方法中计算圆柱滚动距离totalScrollY
计算滚动了多少个条目change = (int) ((float) totalScrollY / itemHeight);
计算当前条目位置preCurrentIndex(处理超出边界的情况) 计算滚动超出条目的位移: int j2 = (int) ((float) totalScrollY % itemHeight);
绘制各个条目:
计算条目弧度radian
计算图纸canvas偏移量
图中的弧度标错了,应该标它的补角,那样感觉不好理解,大家自行脑补一下
h2也标错了,画图的时候忘记考虑空白区域了,h2应该是文字高度的sin值
double h1 = Math.cos(radian) * (double) radius;
double h2 = (Math.sin(radian) * (double) maxTextHeight) / 2D)
int translateY = (int) ((double) radius h1 h2;
图纸延Y方向缩放,值为弧度radian的sin值(这样出来的效果就感觉是个圆柱)
onTouchEvent方法,当手离开控件时开始平滑滚动控件
LoopViewGestureListener处理手势,当按下时取消所有的滚动,当滑行时,平滑滚动
平滑滚动用定时器ScheduledExecutorService来处理
哪里写的不对的希望大家指正。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。