【发布时间】:2017-02-23 20:24:36
【问题描述】:
代码:
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);
}
结果:
问题: 如何制作内笔画而不是外笔画?
谢谢
【问题讨论】:
-
边缘被切断,因为您没有考虑笔划宽度。您需要将
rect在每条边上至少插入Paint的笔划宽度的一半。然后将Paint的笔划连接设置为Paint.Join.ROUND可能会处理底部的“尖峰”。 -
"Paint.Join.ROUND" - 它在左侧和右侧给出圆角。 “你没有考虑笔画宽度” - 我不喜欢在这里计算一些东西的想法。很明显,内部笔画解决了这个问题。 Android 不支持吗?
-
答案是否定的 - android 不支持。 stackoverflow.com/questions/15309029/…
-
是的,@j2ko 关于笔划居中是正确的,除非它在最近的版本中发生了变化,但你仍然需要考虑旧版本。至于圆角,无论是圆角、斜角还是其他,您可能只需要更改第一段和最后一段的笔触连接类型,或者对所有内容进行斜接,并使用
setStrokeMiter()进行调整。或者你可以在之后画一些东西来“擦除”那些尖峰,但这似乎有点多余。 -
@Mike M,谢谢。我愿意接受你的回答。但我不能,因为你把它写成评论。赞成。