【问题标题】:drawArc strange behaviordrawArc 奇怪的行为
【发布时间】: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,谢谢。我愿意接受你的回答。但我不能,因为你把它写成评论。赞成。

标签: android drawing draw


【解决方案1】:

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

更新:您可以使用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);
    }

这会给你左右两边的尖锐广告。

结果:

【讨论】:

  • 正如我上面所说,它提供了圆形的左右角。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2015-07-20
  • 2010-10-03
  • 2021-07-12
  • 2013-10-04
  • 2019-01-23
相关资源
最近更新 更多