我正在尝试将自定义FadingColor从纯色转换为应用程序的实际屏幕,
我有一个画布可以画画,我用
绘制画面// int alpha is ensured to stay in [0,255] range...
alpha -= 1;
canvas.drawColor(Color.WHITE);
//then I draw a circle in the middle
//...
canvas.drawColor(Color.argb(alpha,255,255,255));
(我很清楚画布是双缓冲的,我每帧画画,但它仍然闪烁......)
我无法理解的是,当屏幕在动画中闪烁时,在argb(255,255,255,255)上字面意思为argb(alpha,255,255,255)的背景在某些帧中呈现为浅灰色!!
我只想了解这怎么可能?半透明的白色怎么能使白色背景变白???
答案 0 :(得分:2)
我找到了解决方案!
首先,我认为问题与ColorFilter Mode(或PorterDuff.Mode)有关,当使用alpha组件应用两种颜色时,默认情况下它们不会混合'ADD'。注意,我仍然不完全理解为什么,也许有人可以详细解释..
(技巧)解决方案(因为较低的API不支持PorterDuff.Mode)我使用了Shader(只有一种颜色的LinearGradient)
paint.setShader(new LinearGradient(0,0,100,100,Color.argb(alpha,red,green,blue),
Color.argb(alpha,red,green,blue), Shader.TileMode.REPEAT));
此解决方案修复了动画中显示的闪烁和奇怪的颜色组合。