如何预分配RadialGradient? [英] How to preallocate RadialGradient?

查看:108
本文介绍了如何预分配RadialGradient?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm drawing some circles on a canvas. I want to apply a radial gradient to each of this circle. I'm currently allocating a new gradient for each circle, but i'm guessing this not a very good idea.

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

    }
}

是否知道每个圆具有相同的半径但坐标不同的解决方案来预分配径向梯度?

Is there a solution to preallocate the radial gradient knowing that each circle have the same radius but differents coordinates ?

谢谢

推荐答案

获取RadialGradient对象并将其绘制到位图,然后继续为每个圆将该位图绘制到画布"上.

Take the RadialGradient object and draw it to a Bitmap, then proceed to draw that Bitmap to the Canvas for each circle.

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

这篇关于如何预分配RadialGradient?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆