【问题标题】:Lineargradient is drawn offset from specified positon线性渐变从指定位置偏移绘制
【发布时间】:2016-12-02 01:27:34
【问题描述】:

我使用以下代码使用 Lineargradient 制作了色调渐变:(我知道使用 Color.parseColor 可以使其变得更简单,但对于我打算做的事情,它必须是这种方式。我也不能使用可绘制对象。)

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

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

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

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

编辑:也许这可以通过为颜色设置不相等的位置来解决,但是我如何计算这些确切的位置?

【问题讨论】:

  • 老实说,实际和预期之间的唯一区别似乎是一些偏移。
  • 这就是我要解决的问题,它不能由我提供的代码之外的任何内容引起。
  • 是的,我明白了。如果你使用 0、1、1 作为最后一个颜色,而不是 360、1、1,会怎样?
  • 不,很遗憾,这并不能解决问题。
  • @natario 你想要 50 个免费代表吗,否则它会在赏金结束后永远消失。只需发布一个答案。

标签: android linear-gradients hsv


【解决方案1】:

我总共花了 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 个倾角,导致偏移。

现在一切都说得通了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多