как сделать пользовательский вид набора номеров с помощью тригонометрии - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать собственное представление, которое отображает циферблат с цифрами 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>

Буду очень признателен, если кто-нибудь поможет мне понять, как нарисовать цифры через короткий интервал после жирных отметок, где вы обычно находите цифры на циферблате.

enter image description here

1 Ответ

0 голосов
/ 19 ноября 2018

Я нашел решение своей проблемы. Проблема заключалась в том, что я не могу рассчитать радиус в canvas?.drawText(), поэтому мне нужно было получить предварительно рассчитанное значение.

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

и затем используйте shorterRadius внутри canvas?.drawText() вместе с остальными вычислениями.

Тогда мой циферблат выглядит как прикрепленное изображение.

enter image description here

...