首页 > 解决方案 > Android 在另一个弧内绘制一个弧

问题描述

我正在尝试在 10px in 的距离arc内绘制一个。arcWear OS

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

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

上面的语句会从下午 3 点到 6 点画一条弧线。我想arc在上面startAngle画另一个。sweepAnglearc

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

}

标签: javaandroidandroid-canvaswear-os

解决方案


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

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

例如,总共:

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

推荐阅读