drawArc的问题

时间:2014-05-04 20:01:06

标签: android canvas

我在使用drawArc时遇到了一些问题。当我有4个楔子时,它看起来很好,但是当我没有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

1 个答案:

答案 0 :(得分:3)

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

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度的最后一个扇区,即整圆。然后从0到(360 - 最后一个楔形的扫掠角度)度数绘制数字(n - 1)的楔形。等等。

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;
}

希望它会有所帮助。