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: 饼状图绘制

android自定义View: 饼状图绘制

android自定义View: 饼状图绘制

Android技术分享|自定义View实现Material Design的Loading效果

Android技术分享|自定义View实现Material Design的Loading效果

Android 自定义View - 饼图