1

我有两种颜色和一个视图组件。颜色一是我组件的背景。我会将我的背景颜色更改为两种颜色。但不是突然的。改变类似的动画。例如:

第 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;
}

但这是个坏主意。结果令人失望。这个目标有什么解决方案吗?谢谢。

4

1 回答 1

1

您没有清楚地说明为什么结果令人失望,所以我假设这意味着您获得的颜色过渡不如您预期的那么好。

您的一般方法似乎是正确的,也许您只是缺少一些细节,所以我会用不同的方式重写它。设color1color2为三元组 (R, G, B),其中 R、G、B 中的每一个都在 [0, 1] 范围内。如果不是这种情况,则除以 255(如果这是您的情况的限制),然后再乘以 255。让我们从 过渡到s的步数,这里我包括在初始帧中,但不包括最后一帧。在步骤,你有这样的价值。与您通过执行获得框架中的颜色。现在你可能想乘以255。color1color2scolor1color2kpp = (s - k)/spkcolor = p * color1 + (1 - p) * color2color

此描述的伪代码是:

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)

请注意,at k = 0you have onlycolor1和 at k = syou get only color2。如您所见,它与您发布的更多详细信息相似。请注意,这里我将 R、G、B 中的每一个乘以p

下面是一些分别从黄色过渡到蓝色的示例steps = 10, 25, 500

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2012-12-17T19:11:34.387 回答