【问题标题】:Horizontal LinearGradient with android水平线性渐变与android
【发布时间】:2010-10-22 18:33:17
【问题描述】:

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

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

但是渐变会出现在一个有趣的天使上,或者只有一种颜色...我还尝试以各种方式使用渐变的坐标(认为也许应该将它们转换)到 no利用。我错过了什么?

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    x 永远不会改变梯度,只有 y 会改变。

    所以这可能是这样的:

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

    【讨论】:

    • 像魅力一样工作!我知道它必须很简单……但我认为我永远不会得到它。非常感谢!
    • 正是我想要的,一个简单的例子来说明它是如何工作的。谢谢!
    • 请记住,您不应该在 draw 方法中创建新对象。
    【解决方案2】:

    你可以调整渐变方向

    从上到下

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      相关资源
      最近更新 更多