Android 在另一弧内画一条弧

Android draw one arc within another arc

我正在尝试在 Wear OS.

中以 10px 的距离在另一个 arc 中绘制一个 arc

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

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

上面的语句会在下午3点到6点画一条弧线。 我想在上面 arc.

中的 startAnglesweepAngle 处再画一个 arc

假设需要绘制的总数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);

}

要向内创建同心圆弧,我们只需要 "shrink" 在每一侧按所需的度量设置边界。 RectF class 有方便的 inset(dx, dy) 方法可以做到这一点。它需要以像素为单位的这些度量,因此我们可以简单地为每个传递 10,无需调整。

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

例如一共:

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