При рисовании дуги необходимо указать полную ограничивающую рамку для этой дуги, а также начальный и угол разворота.Я пытаюсь увидеть их визуально, вот так:
![arcTo angles](https://i.stack.imgur.com/f3CbV.png)
Например, при движении по часовой стрелке начальный угол расположен на 180 градусов от начала координат.А из startAngle, если вы развернитесь на 90 градусов по часовой стрелке, вы окажетесь в желаемой конечной позиции.
Обратите внимание, где на этом рисунке находятся origin, startAngle и sweepAngle.В kotlin это может выглядеть примерно так:
// Given some radius, viewWidth and viewHeight
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
path.apply {
moveTo(radius, 0F)
lineTo(viewWidth - radius, 0F)
arcTo(viewWidth - 2 * radius, 0F, viewWidth, 2 * radius, -90F, 90F, false)
lineTo(viewWidth, radius)
arcTo(viewWidth - 2 * radius, viewHeight - 2 * radius, viewWidth, viewHeight, 0F, 90F, false)
lineTo(radius, viewHeight)
arcTo(0F, viewHeight - 2 * radius, 2 * radius, viewHeight, 90F, 90F, false)
lineTo(0F, radius)
arcTo(0F, 0F, 2 * radius, 2 * radius, 180F, 90F, false)
}
canvas?.drawPath(path, linePaint)
}
И результат будет примерно таким:
![enter image description here](https://i.stack.imgur.com/NcZ72.png)