gpt4 book ai didi

android - drawArc 的问题

转载 作者:太空狗 更新时间:2023-10-29 12:42:28 27 4
gpt4 key购买 nike

我在使用 drawArc 时遇到了一些问题。当我有 4 个楔子时,它似乎很好,但是当我没有 ahve 4 个楔子(比如 10 个)时,楔子就不会正确对齐。你可以在图片中看到,有轻微的错位。有什么想法吗?

    int wedgeNum = 10;

for (int i = 0; i < wedgeNum; i++) {

canvas.drawArc(bounds, 0, 360.0f / wedgeNum,
true, paints[i % 2]);
canvas.rotate(360.0f / wedgeNum, bounds.centerX(), bounds.centerY());

}

enter image description here enter image description here

最佳答案

在这种有两种颜色的情况下,要解决这个问题,我们可以用第一种颜色绘制一个完整的圆圈,然后在其上绘制第二种颜色的楔形。像这样:

int wedgeNum = 10;

float wedgeSweepAngle = 360f / wedgeNum;
// draw a round gray background
canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.width() / 2f, paints[1]);
// draw only green wedges
for (int i = 0; i < wedgeNum; i += 2) {
canvas.drawArc(bounds, i * wedgeSweepAngle, wedgeSweepAngle, true, paints[0]);
}

一般情况下,我们可以按相反的顺序绘制楔形。此外,所有楔形的开始角度将为 0,结束角度为旧值。首先,我们绘制从 0 到 360 度的最后一个扇区,即整个圆。然后用数字 (n - 1) 从 0 到(360 - 最后一个楔形的扫描角)度绘制楔形。等等。

int wedgeNum = 10;

float wedgeSweepAngle = 360f / wedgeNum;
// end angle, we will decrease this value on each iteration
float endAngle = 360f;
// start angle, always 0
final float startAngle = 0f;
// reverse order
for (int i = wedgeNum - 1; i >= 0; i--) {
// draw wedge from 0 to endAngle
canvas.drawArc(bounds, startAngle, endAngle, true, paints[i % 2]);
// calculate the next wedge's end angle
endAngle -= wedgeSweepAngle;
}

希望对您有所帮助。

关于android - drawArc 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com