在這種情況下的兩種顏色,來解決這個問題,我們可以得出一個第一色的整圈,然後繪製其上的第二顏色的楔子。像這樣:
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;
}
希望它能幫上忙。
如果您在不旋轉畫布的情況下繪製它們,則會發生同樣的事情(例如,通過改變'startAngle')? – Geobits
是的,完全一樣的事情發生 –
在Android中,canvas上有一個已知的drawArc錯誤。 @erakitin提出的答案可能是最好的解決方案 –