0

我正在尝试创建一个自定义视图,该视图显示一个带有数字 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>

如果有人能帮助我了解如何在粗刻度线后的一小段空间内绘制数字,我将不胜感激,您通常会在拨号盘中找到数字。

在此处输入图像描述

4

1 回答 1

0

我找到了解决我的问题的方法。问题是我无法计算半径,canvas?.drawText()所以我需要提供预先计算的值。

val radius = diameter / 2
val mark = radius * 0.30f
val shorterRadius = radius - mark

然后将shorterRadius内部canvas?.drawText()与其余计算一起使用。

然后我的表盘看起来像附图。

在此处输入图像描述

于 2018-11-19T18:23:43.720 回答