我正在尝试创建一个自定义视图,该视图显示一个带有数字 1-10 的表盘。我使用三角函数来找到表盘数字的 X 和 Y 位置。我可以毫无问题地找到圆圈周围的位置,但我无法将它们进一步对齐到表盘的中心。以数字 6 为例,我只想将它放置在略高于厚白色刻度线的位置。
我尝试过“缩短半径”的版本。
val diameter = Math.min(width, height)
val radius = diameter / 2
val distance = radius * 0.20f //20% of radius
然后从半径中减去“距离”以找到那里的 X 和 Y 位置,然后在没有运气的情况下在这些位置上添加数字。
下面是计算 X 和 Y 位置并将表盘屏幕截图中显示的数字相加的代码。
for (i in 1..10) {
canvas?.drawText(i.toString(),cx.toFloat() +
(Math.cos(Math.toRadians(degrees.getInt(feetNumber,0).toDouble())).toFloat()) *
radius - (paint.measureText(i.toString()) / 2),
cy.toFloat() +
(Math.sin(Math.toRadians(degrees.getInt(feetNumber,0).toDouble())).toFloat()) *
radius + (paint.measureText(i.toString()) / 2), paint)
feetNumber++;
}
我在数组资源文件中添加了度数。
<resources>
<array
name="degrees">
<item>270</item>
<item>306</item>
<item>342</item>
<item>18</item>
<item>54</item>
<item>90</item>
<item>126</item>
<item>162</item>
<item>198</item>
<item>234</item>
</array>
</resources>
如果有人能帮助我了解如何在粗刻度线后的一小段空间内绘制数字,我将不胜感激,您通常会在拨号盘中找到数字。