这是我使用的代码:

Shader mShader0 = new LinearGradient(10 , 0,  66 ,0,
    new int[] { Color.RED, Color.GREEN, Color.BLUE },
    null, Shader.TileMode.REPEAT);  // CLAMP MIRROR REPEAT
pincel1.setShader(mShader0);

canvasG.drawRect(   0, 0,   30, 200, pincel1);
canvasG.drawRect(1250, 0, 1280, 200, pincel1);
canvasG.drawRect(1000, 0, 1030, 200, pincel1);
canvasG.drawRect( 200, 0,  230, 200, pincel1);
canvasG.drawRect( 250, 0,  280, 200, pincel1);

pincel1.setShader(null);


结果是所有列都不同。

为什么不一样呢?怎么了?

最佳答案

原因是因为LinearGradient被定义为以x=10开始,以x=66结束并在此之后重复。将渐变指定给绘画并绘制不同的矩形时,矩形的坐标用于确定要绘制渐变的“部分”。例如:x=0width=56中的矩形将包含完整的渐变。之后的任何矩形将重复该图案。

为了进一步理解,如果在x={a, a+56, a+2*56, a+3*56 ..}width<56处绘制矩形,则它们将包含相同的渐变图案。我希望这可以解释为什么上述观察是正确的。

关于android - Java中使用Android的Vertical LinearGradient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20183422/

10-12 06:12