自定义视图 - 圆周上的数字和字母

Custom View - digits and alphabets on the circumference of a circle

任何人都可以向我解释这种行为的原因是什么吗?

问题是,从“关闭”到“2”始终显示完美,超出了我给出的半径。 半径比圆的半径+35。

现在当我写数字时,随着数字的下降,它开始变得混乱。

并且就字母而言,它触及边缘并与它重叠。

谁能告诉我这是什么原因?因为半径总是大于当前圆的半径,所以字母表应该类似于“off”。

xy 点的计算...

// Angles are in radians.
   val startAngle = Math.PI * (9 / 8.0)   
   val angle = startAngle + pos.ordinal * (Math.PI / 4)
   x = (radius * cos(angle)).toFloat() + width / 2
   y = (radius * sin(angle)).toFloat() + height / 2

我调整了度数,似乎越接近 0 度就开始变得混乱,随着度数的增加,它不断增加半径 space。

在此处说明...我想知道是什么导致了这种行为,或者只是解释其背后的原因/数学。谢谢

从评论看来您正在遵循此代码实验室代码https://github.com/google-developer-training/android-advanced/tree/master/CustomFanController

你只需要考虑文字的上升和体面。所以在圆的圆周上画数字

val yPos = (pointPosition.y - (paint.descent() + paint.ascent()) / 2).toInt() 
canvas.drawText(label, pointPosition.x, yPos.toFloat(), paint)

以上是根据Android Center text on canvas

这确实在正确的位置绘制了文本,但如果文本太大,它就会重叠