2013-02-14 56 views
1

我在畫布上畫了一些圈子。我想對這個圓圈應用徑向漸變。 我目前爲每個圓圈分配一個新的漸變,但我猜這不是一個好主意。如何預分配RadialGradient?

protected void onDraw(Canvas canvas) 
{ 
    int radius = 6; 
    int cx = radius; 
    int cy = radius ; 

    for(int i = 0; i < nbPage; i++) 
    { 
     if(i % 12 == 0 && i > 0) { 
      cx = radius; 
      cy += 20; 
     } 

     RadialGradient gradient = new RadialGradient(cx, cy, radius, 0xFFFFFFFF, 
       0xFF000000, android.graphics.Shader.TileMode.CLAMP); 
     p.setDither(true); 
     p.setShader(gradient); 

     canvas.drawCircle(cx, cy, radius, p); 
     cx += 20; //16px + 4 de marge 

    } 
} 

是否有預分配的徑向漸變知道,每個圓圈的半徑相同,但型動物座標的解決方案嗎?

由於

回答

1

採取的RadialGradient對象,並將其繪製成位圖,然後進行的是位圖繪製到畫布每個圓。

Bitmap circleBitmap = Bitmap.create((int) (radius * 2.0f), (int) (radius * 2.0f), 
    Bitmap.Config.ARGB_8888); 
Canvas tempCanvas = new Canvas(circleBitmap); 

RadialGradient gradient = new RadialGradient(cx, cy, radius, 0xFFFFFFFF, 
      0xFF000000, android.graphics.Shader.TileMode.CLAMP); 
p.setDither(true); 
p.setShader(gradient); 

tempCanvas.drawCircle(radius, radius, radius, p); 

for (int i = 0; i < nbPage; i++) 
    canvas.drawBitmap(circleBitmap, cx + (i * 20) - radius, cy - radius, p);