drawArc 奇怪的行为

drawArc strange behavior

代码:

int width = canvas.getWidth();
int height = canvas.getHeight();

int shift = 0;
RectF rect = new RectF(0 + shift, 0 + shift, width - 1 - shift, height - 1 - shift);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(30);
paint.setColor(0xff009900);

float angle_step = 180 / 5;

for (int i=0; i<5; i++) {
  canvas.drawArc(rect, 180 + angle_step * i, angle_step, true, paint);
}

结果:

问题: 如何使内部笔划而不是外部笔划?

谢谢

正如@Mike M(所有功劳都归于他)所述,解决方案如下:

UPDATE:您可以使用 mitter limit 代替 Paint.Joint.Round,如下所示:

    int width = canvas.getWidth();
    int height = canvas.getHeight();

    int shift = 0;
    RectF rect = new RectF(0 + shift, 0 + shift, width - 1 - shift, height - 1 - shift);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.STROKE);

    //Make stroke mitter to affect only very sharp angles
    paint.setStrokeMiter(1.8f);

    int strokeWidth = 30;
    paint.setStrokeWidth(strokeWidth);
    paint.setColor(0xff009900);

    //inset drawing rect by the half of stroke width
    rect.inset(strokeWidth/2,strokeWidth/2);

    float angle_step = 180 / 5;

    for (int i=0; i<5; i++) {
        canvas.drawArc(rect, 180 + angle_step * i, angle_step, true, paint);
    }

这将为您提供左右清晰的广告。

结果: