我有两种颜色和一个 View 组件。颜色一是我的组件的背景。我会将我的背景颜色更改为颜色二。但不是突然。改变类似的动画。例如:
第二个 1:90% 颜色 1 + 10% 颜色 2 第二个 1:80% 颜色 1 + 20% 颜色 2 …… 第二个 1:10% 颜色 1 + 90% 颜色 2 第二个 1:0% 颜色 1 + 100% 颜色 2
我当然试过了:
percent=100;
while (percent>=0) {
color = (color1*precent)+(color2*(100-percent));
percent-=10;
}
但这是个坏主意。结果令人失望。 这个目标有什么解决方案吗? 谢谢。
最佳答案
您没有明确说明结果令人失望的原因,所以我假设这意味着您获得的颜色过渡没有预期的那么好。
您的一般方法似乎是正确的,也许您只是遗漏了一些细节,所以我会用不同的术语重写它。设 color1
和 color2
是三元组 (R, G, B),其中每个 R、G、B 都在 [0, 1] 范围内。如果不是这种情况,则除以 255(如果这是您的情况的限制),然后再乘以 255。令 s
为从 color1
转换的步骤数> 到 color2
,这里我在 s
中包含了带有 color1
的初始帧,但没有包含带有 color2
的最终帧>。在步骤 k
中,您有一个值 p
使得 p = (s - k)/s
。使用 p
,您可以通过 color = p * color1 + (1 - p) * color2
获得帧 k
中的颜色。现在您可能希望将 color
乘以 255。
这个描述的伪代码是:
color1 = (R1, G1, B1)
color2 = (R2, G2, B2)
s = N
for k = 0 to s: # s + 1 steps, according to the description
p = (s - k) / s
color = (p * color1) + ((1 - p) * color2)
请注意,在 k = 0
时,您只有 color1
,而在 k = s
时,您只有 color2
。如您所见,它类似于您发布的更多详细信息。请注意,这里我将 R、G、B 中的每一个乘以 p
。
下面是一些从黄色过渡到蓝色的示例,分别为 steps = 10, 25, 500
。
关于android - 如何混合两种不同百分比的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919133/