Lineargradient从指定的位置

时间:2016-12-02 01:27:34

标签: android linear-gradients hsv

我用这个代码用一个Lineargradient做了一个色调渐变:(我知道它可以用Color.parseColor变得更简单但是我必须这样做我打算做的。我也不能使用drawable 。)

colors = new int[]{ Color.HSVToColor(new float[]{0, 1, 1}),
                    Color.HSVToColor(new float[]{60, 1, 1}), 
                    Color.HSVToColor(new float[]{120, 1, 1}), 
                    Color.HSVToColor(new float[]{180, 1, 1}),
                    Color.HSVToColor(new float[]{240, 1, 1}), 
                    Color.HSVToColor(new float[]{300, 1, 1}), 
                    Color.HSVToColor(new float[]{360, 1, 1}) };
Shader shader = new LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP);
paint.setShader(shader);

与预期结果相比,使用略微偏移的颜色产生此结果,绿色区域太小,蓝色区域太大。

comparison

我检查了一切。我尝试使用new float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}代替null作为position参数,结果相同。这可能也是一个错误。

请注意,这不是this post也不是this one的重复。这些是关于在代码中设置的不正确的渐变停止,这不是我的情况。它可能与this one有关,但我不知道如何。

编辑:也许这可以通过设置不相等的位置来解决,但我怎样才能计算出这些确切的位置?

1 个答案:

答案 0 :(得分:3)

我一直在努力解决这个问题超过3个小时,而且......结果几乎没有。它出现在我的代码中。最糟糕的是我加了赏金并在15分钟后解决了。

我在视图中绘制了具有特定填充的渐变而不是此

LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP);

我必须这样做:

LinearGradient(left, 0, right, 0, colors, null, Shader.TileMode.CLAMP);

不知何故,渐变开始于我添加到视图中的填充之前,在(0,0)处,这是我渐变开始的10左右,导致偏移。

enter image description here

现在一切都有道理。