private static final float CIRCLE_LIMIT = 359.9999f;
/**
* Draws a thick arc between the defined angles, see {@link Canvas#drawArc} for more.
* This method is equivalent to
* <pre><code>
* float rMid = (rInn + rOut) / 2;
* paint.setStyle(Style.STROKE); // there's nothing to fill
* paint.setStrokeWidth(rOut - rInn); // thickness
* canvas.drawArc(new RectF(cx - rMid, cy - rMid, cx + rMid, cy + rMid), startAngle, sweepAngle, false, paint);
*
* но поддерживает разные краски заливки и обводки.
*
* @param canvas
* @param cx горизонтальная средняя точка овала
* @param cy вертикальная средняя точка овала
* @param rInn внутренний радиус сегмента дуги
* @param rOut внешний радиус сегмента дуги
* @param startAngle see {@link Canvas # drawArc}
* @param sweepAngle see {@link Canvas # drawArc}, ограничено до & plusmn; 360
* @param заполнить заливкой краской, можно
null
* инсульт @parm, краска может быть
null
* @see Canvas # drawArc
* /
public static void drawArcSegment (Canvas canvas, float cx, float cy, float rInn, float rOut, float startAngle,
float sweepAngle, заливка краской, мазок краски) {
if (sweepAngle> CIRCLE_LIMIT) {
sweepAngle = CIRCLE_LIMIT;
}
if (sweepAngle
Может быть расширен до овальной дуги путем дублирования rInn
и rOut
для направлений x и y.
Также не было частью вопроса, но нарисовать текст в середине сегмента:
textPaint.setTextAlign(Align.CENTER);
Path midway = new Path();
float r = (rIn + rOut) / 2;
RectF segment = new RectF(cx - r, cy - r, cx + r, cy + r);
midway.addArc(segment, startAngle, sweepAngle);
canvas.drawTextOnPath("label", midway, 0, 0, textPaint);