-->

如何预分配的RadialGradient?(How to preallocate RadialGra

2019-10-17 17:19发布

我画在画布上一些圈子。 我想径向渐变应用到每个这个圈子的。 我目前正在分配为每圈新的渐变,但我猜这不是一个很好的主意。

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

    }
}

是否有预分配的径向渐变知道,每个圆圈的半径相同,但型动物坐标的解决方案吗?

谢谢

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


文章来源: How to preallocate RadialGradient?