Android 自定义View:绘制轮盘扇形区并加入扇形区点击事件
Posted 匆忙拥挤repeat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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数组中,出现了scale值;所以,看到这种结果,就想,应该是在矩阵旋转后,原始R它此时所在的外矩形,被写回了 R,所以会有scale缩放值…
最终的解决方案反而很简单,就是在 path.addArc()
中的 startAngle
值,加上旋转的角度就可以了。
II. 效果图
由于有自定义属性,还有其它util代码等,整体代码就不帖了。GH传送门
以上是关于Android 自定义View:绘制轮盘扇形区并加入扇形区点击事件的主要内容,如果未能解决你的问题,请参考以下文章
Android技术分享|自定义View实现Material Design的Loading效果