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. 效果图
由于有自定义属性,还有其它util代码等,整体代码就不帖了。GH传送门