我有两种颜色和一个视图组件。颜色一是我的组件的背景。我将把背景颜色更改为颜色二。但不是突然的。改变类似动画。例如:
第二个 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
and color2
是三元组 (R, G, B),其中 R、G、B 中的每一个都在 [0, 1] 范围内。如果不是这种情况,请除以 255(如果这是您的情况的限制),然后再乘以 255。令s
是要转换的步数color1
to color2
,这里我包括在s
初始帧与color1
但不是最终帧color2
。在步骤k
,你有一个值p
这样p = (s - k)/s
. With p
您获得框架中的颜色k
通过做color = p * color1 + (1 - p) * color2
。现在你可能想乘以color
by 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
分别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)