2013-02-14 5 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 

    } 
} 

Есть ли решение, чтобы предварительно выделить радиальный градиент, зная, что каждый круг имеет тот же радиус, но Differents координаты?

Благодаря

ответ

1

Возьмите объект RadialGradient и привлечь его к Bitmap, а затем продолжить рисовать, что Bitmap на холсте для каждого круга.

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