java - Android 在另一个弧内绘制一个弧
问题描述
我正在尝试在 10px in 的距离arc
内绘制一个。arc
Wear OS
我们知道arc
可以使用以下方法绘制 an:
canvas.drawArc(arcBounds, 0, 90, false, paint);
上面的语句会从下午 3 点到 6 点画一条弧线。我想arc
在上面startAngle
画另一个。sweepAngle
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);
}
解决方案
要向内创建同心圆弧,我们只需要在每一侧按所需的度量“缩小”边界。该类RectF
有一个方便的inset(dx, dy)
方法可以做到这一点。它期望这些度量以像素为单位,因此我们可以简单地通过10
每个度量,无需调整。
这将修改RectF
' 的边界,因此为了保持它们在原始值中的初始值,我们可以使用RectF
' 的复制构造函数在绘制循环之前创建一个临时副本。
例如,总共:
RectF temp = new RectF(arcBounds);
for (...) {
canvas.drawArc(temp, 0, 90, false, paint);
temp.inset(10f, 10f);
}
推荐阅读
- docker - docker build 时权限被拒绝
- python - Pandas 两列的条件滚动和
- javascript - keydown 的事件监听器无法正常工作
- alfresco - 无法使用 CMIS 解锁 Alfresco 文档
- javascript - 在循环中创建动态 div 元素并附加事件处理程序时,仅为最后一个元素触发事件
- javascript - Bootstrap在ejs中的for循环内折叠
- python - 有没有办法将参数从 Jenkins 作业传递到 RobotFramework 和/或 python 脚本?我可以在有和没有 Jenkinsfile 的情况下做到这一点吗?
- ruby - Selenium 在 chrome 84 中打开一个空白页,在 83 中工作正常
- python - 是否可以在 Python 上使用 OpenCV 进行转换,但只能在图像的边缘应用?
- javascript - 函数针对每个键入的 javascript 字母单独运行(字体粗细更改)