水平LinearGradient与android

时间:2010-10-22 18:33:18

标签: android

这一定很容易,但我真的很茫然......以下代码绘制了一个矩形,其线性渐变从左到右,从白色到黑色,

int x1 = 0, y1 = 0, x2 = 100,  y2 = 40;
Shader shader = new LinearGradient(x1, y1, x2, y2, Color.WHITE, Color.BLACK, TileMode.CLAMP);
Paint paint = new Paint();
paint.setShader(shader);
canvas.drawRect(new RectF(x1, y1, x2, y2), paint);

好的,好的。现在我想要做的是将此渐变更改为水平,以使颜色从白色变为黑色,从上到下。我试图做的是添加:

Matrix trans = new Matrix();
trans.setRotate(90);
shader.setLocalMatrix(trans);

但是渐变是一个有趣的天使,或者只有一种颜色......我也尝试用各种方式(可能认为它们应该被转换)的渐变坐标来玩无济于事。我错过了什么?

2 个答案:

答案 0 :(得分:71)

我没有做太多的android编码,但值得尝试的一种方法是:

int x1 = 0, y1 = 0, x2 = 0,  y2 = 40;

x只会在渐变中发生变化。

所以这看起来像是:

Shader shader = new LinearGradient(0, 0, 0, 40, Color.WHITE, Color.BLACK, TileMode.CLAMP);
Paint paint = new Paint(); 
paint.setShader(shader); 
canvas.drawRect(new RectF(0, 0, 100, 40), paint); 

答案 1 :(得分:1)

可以调整渐变方向

从上到下

LinearGradient(0, 0, 0, height, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)

自下而上

LinearGradient(0, height, 0, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)

从左到右

LinearGradient(0, 0, width, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)

从右到左

LinearGradient(width, 0, 0, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)