我用这个代码用一个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);
与预期结果相比,使用略微偏移的颜色产生此结果,绿色区域太小,蓝色区域太大。
我检查了一切。我尝试使用new float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}
代替null
作为position参数,结果相同。这可能也是一个错误。
请注意,这不是this post也不是this one的重复。这些是关于在代码中设置的不正确的渐变停止,这不是我的情况。它可能与this one有关,但我不知道如何。
编辑:也许这可以通过设置不相等的位置来解决,但我怎样才能计算出这些确切的位置?
答案 0 :(得分:3)