【发布时间】: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 post 或 this one 的重复项。这些是关于代码中设置的不正确的渐变停止,这不是我的情况。它可能与this one 有关,但我不知道如何。
编辑:也许这可以通过为颜色设置不相等的位置来解决,但是我如何计算这些确切的位置?
【问题讨论】:
-
老实说,实际和预期之间的唯一区别似乎是一些偏移。
-
这就是我要解决的问题,它不能由我提供的代码之外的任何内容引起。
-
是的,我明白了。如果你使用 0、1、1 作为最后一个颜色,而不是 360、1、1,会怎样?
-
不,很遗憾,这并不能解决问题。
-
@natario 你想要 50 个免费代表吗,否则它会在赏金结束后永远消失。只需发布一个答案。
标签: android linear-gradients hsv