【问题标题】:Android draw one arc within another arcAndroid 在另一个弧内绘制一个弧
【发布时间】:2019-08-23 15:40:35
【问题描述】:

我正在尝试在另一个arc 内绘制一个arc,距离Wear OS 10px。

我们知道arc 可以使用以下方法绘制:

canvas.drawArc(arcBounds, 0, 90, false, paint);

上面的语句会从下午 3 点到 6 点画一条弧线。 我想在上面的arc 中同时绘制另一个arc startAnglesweepAngle

假设需要绘制的arc的总数是基于列表的大小,如何才能达到预期的输出?

这是我原来的 arcBounds init 方法的样子:

 private void initArcBounds(int width, int height, int additionalMargin) {
        float margin = res.getDimension(R.dimen.timearc_margin) + additionalMargin;

        arcBounds.left = margin;
        arcBounds.top = margin;
        arcBounds.right = width - margin;
        arcBounds.bottom = height - margin;
    }


for (Event el : eventList) {
      canvas.drawArc(arcBounds, start, sweepAngle, false, timeArcPaints);
      arcBounds.inset(10,10);

}

【问题讨论】:

  • 如果您所说的“内部”是指朝向中心,那么arcBounds.inset(10, 10) 将在所有边上将边界缩小 10 个像素。您可以轻松循环列表的大小,每次调用相同的inset()drawArc()
  • 嗯基本上我想要类似于这个问题中的图像的东西:stackoverflow.com/questions/11549984/…,但是是弧形的。
  • 这是 200px x 200px 的弧形扫描,每步插入 10px:i.stack.imgur.com/cgXHh.png
  • 对,所以我尝试了 inset 方法,但似乎 inset 被应用于最外层的弧线,也使其收缩,这不是我想要的。我将添加一个代码 sn-p。
  • 哦,哇,确实有效。如果你能写一个,我会很乐意接受你的回答! :)

标签: java android android-canvas wear-os


【解决方案1】:

要向内创建同心圆弧,我们只需将边界“缩小”到每边所需的度量即可。 RectF 类具有方便的 inset(dx, dy) 方法,它可以做到这一点。它期望这些度量以像素为单位,因此我们可以简单地为每个传递10,无需调整。

这将修改RectF 的边界,因此为了保持它们在原始值中的初始值,我们可以使用RectF 的复制构造函数在绘制循环之前创建一个临时副本。

例如,一共:

RectF temp = new RectF(arcBounds);
for (...) {
    canvas.drawArc(temp, 0, 90, false, paint);
    temp.inset(10f, 10f);
}

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多