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);
}
这将为您提供左右清晰的广告。
结果:
代码:
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);
}
这将为您提供左右清晰的广告。
结果: