我有两种颜色和一个View组件。颜色一是我的组件的背景。我将我的背景颜色改为颜色二。但不是突然。改变类似的动画。例如:
第二个1:90%color1 + 10%color2 第二:1:80%color1 + 20%color2 ...... 第二个1:10%color1 + 90%color2 第二个1:0%color1 + 100%color2
当然我尝试了:
percent=100;
while (percent>=0) {
color = (color1*precent)+(color2*(100-percent));
percent-=10;
}
但这是一个坏主意。结果令人失望。 这个目标有什么解决方案吗? 感谢。
答案 0 :(得分:1)
你没有清楚地说明为什么结果令人失望,所以我认为这意味着你得到的颜色转变不如你预期的那么好。
你的一般方法似乎是正确的,也许你只是缺少一些细节,所以我会用不同的术语重写它。设color1
和color2
为三元组(R,G,B),其中R,G,B各自在[0,1]范围内。如果不是这种情况,请除以255(如果这是您的情况下的限制),然后再乘以255.让s
为从color1
过渡到{{1}的步骤数},这里我将color2
包含在s
的初始框架中,但不包括color1
的最终框架。在步骤color2
,您的值k
为p
。使用p = (s - k)/s
,您可以通过p
获取第k
帧中的颜色。现在您可能希望将color = p * color1 + (1 - p) * color2
乘以255。
此描述的伪代码为:
color
请注意,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
。如您所见,它与您发布的更多细节类似。请注意,这里我将R,G,B中的每一个乘以color2
。
以下是一些示例,分别从黄色转换为蓝色,p
。