在Android Canvas上绘画时颜色出现错误



有人见过这样的东西吗?

我用下面的代码在画布上画一些矩形。

int col = pad.getColor();
paint.setColor(col);
Log.d("XXX","col " + Color.red(col) + "," + Color.green(col) + "," + Color.blue(col) + "  " + Color.alpha(col) );
canvas.drawRoundRect(pad.getFloatRect(), 20, 20, paint);

在某些情况下,这完全按照预期工作。我将矩形涂上我存储在pad对象中的颜色。

但在其他情况下,矩形的颜色是错误的。

例如,我有一个便签本,它的颜色是白色。颜色来自colors.xml,它是用

指定的。
<color name="pad3">#FFFFFF</color>

当我对col的红、绿、蓝分量进行对数时,我得到了255、255、255。

但是实际的矩形被涂成了深灰色而不是白色。

我完全被这个迷惑了。

我能想到的只有两种可能:

a)在Android中有一些设置(主题或样式)以某种方式用替代替代某些颜色。即使颜色是明确设置的。这可能吗?如果是这样,我不是故意这样做的,但我使用的是一个由Android Studio创建的项目,它创建了很多样板文件,我应该在哪里寻找这些设置来停止它?

b)我注意到较深的颜色可以出来,而最浅的颜色有这个问题。我想知道这是否是因为当尝试将Android颜色存储在int中时会丢失一些高端位。虽然白色的红色、绿色和蓝色成分都是255,这一事实表明情况并非如此。

我也认为它与alpha通道有关,但在所有情况下都是255。

所以我完全被难住了。有些颜色很好。别人不是。我看不出有和没有的有什么区别。

OK

我用这个帮助解决了我的问题:https://stackoverflow.com/a/67399219/8482

我想基本上就是加上这行

<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>

到我的主题,解决了这个问题。它关闭了一些强制的自动暗模式。

以前看起来深色是正常渲染的,但浅色是自动变暗的。现在颜色又恢复正常了。

提醒一下。这太疯狂了!为什么像这样的东西是默认的,你必须选择退出,而不是你明确选择加入?

最新更新