水平LinearGradient与android

ako*_*ski 35 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);
Run Code Online (Sandbox Code Playgroud)

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

Matrix trans = new Matrix();
trans.setRotate(90);
shader.setLocalMatrix(trans);
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*e G 73

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

int x1 = 0, y1 = 0, x2 = 0,  y2 = 40;
Run Code Online (Sandbox Code Playgroud)

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); 
Run Code Online (Sandbox Code Playgroud)

  • 请记住,您不应该在draw方法中创建新对象. (6认同)

小智 12

您可以调整渐变方向

从上到下

LinearGradient(0, 0, 0, height, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)
Run Code Online (Sandbox Code Playgroud)

从下到上

LinearGradient(0, height, 0, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)
Run Code Online (Sandbox Code Playgroud)

左到右

LinearGradient(0, 0, width, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)
Run Code Online (Sandbox Code Playgroud)

右到左

LinearGradient(width, 0, 0, 0, gradientStartColor, gradientEndColor, Shader.TileMode.CLAMP)
Run Code Online (Sandbox Code Playgroud)