Android 自定义View:绘制轮盘扇形区并加入扇形区点击事件

文章目录


I. 前言

还记得是五六年前写的demo,用的 canvas.drawArc() 及 旋转画布等实现了,绘制轮盘,当初不会path,不知道怎么搞 扇形区的点击事件… 强行搁置了… 后来学了Path后,也没去改它。这两天用 kotlin 重写了下,path玩了起来,然而写点击的扇形区域匹配时,且在有旋转角度后,先入为主的就走入了误区,

val bounds = RectF()
path.computeBounds(bounds, true)

想着,用

matrix.postRoate(angle) 
mapRect(bounds)

得到旋转后的矩形,去构建 Region ,去匹配 旋转后的 扇形点击区。从而走上了不归路…
最后发现按中心点旋转后,原始矩形 R,会变得倾斜,这时原始的left坐标,目测看来,可能是left/right/top/bottom,恩,是的,(因角度的不同)都可能;且通过debug,发现matrix的values数组中,出现了sacle值;所以,看到这种结果,就想,应该是在矩阵旋转后,原始R它此时所在的外矩形,被写回了 R,所以会有scale缩放值…

最终的解决方案反而很简单,就是在 path.addArc() 中的 startAngle 值,加上旋转的角度就可以了。


II. 效果图

roulette view

由于有自定义属性,还有其它util代码等,整体代码就不帖了。GH传送门


发布了400 篇原创文章 · 获赞 364 · 访问量 162万+

猜你喜欢

转载自blog.csdn.net/jjwwmlp456/article/details/105354976