Android 在SurfaceView中绘制颜色为F3(背景光)的矩形,但设备显示不同的颜色f7f3f7!你知道为什么吗?安卓

Android 在SurfaceView中绘制颜色为F3(背景光)的矩形,但设备显示不同的颜色f7f3f7!你知道为什么吗?安卓,android,android-canvas,Android,Android Canvas,我有扩展SurfaceView的MySurfaceView。我在MySurfaceView中画了一个矩形作为背景 Paint p = new Paint(); p.setColor(0xfff3f3f3); canvas.drawRect(0f, 0f, bgWidth, bgHeight, p); FFF3是背景全息光。我希望MySurfaceView的背景色与其他UI组件的背景色相同 但是,在Nexus 5中,MySurfaceView的背景色实际上是fff7f3f7:( 我怎么会知道呢?

我有扩展SurfaceView的MySurfaceView。我在MySurfaceView中画了一个矩形作为背景

Paint p = new Paint();
p.setColor(0xfff3f3f3);
canvas.drawRect(0f, 0f, bgWidth, bgHeight, p);
FFF3是背景全息光。我希望MySurfaceView的背景色与其他UI组件的背景色相同

但是,在Nexus 5中,MySurfaceView的背景色实际上是fff7f3f7:(

我怎么会知道呢?我通过DDMS截图,打开GIMP,选择颜色

然后我尝试其他一些值,它们都会上升和下降


向上:

原来是f7f3f7.:(

原来是F7F7:(

原来是F7F7:(

原来是F7F7


向下:

原来是f7f3f7.:(

结果证明是EFF


知道为什么吗?我只是想要背景光或F3的颜色


编辑1-与屏幕截图相关的问题

我的另一个UI组件,例如RelativeLayout,将属性“android:background”设置为background\u holo\u light(F3)。这些UI组件在Nexus 5的屏幕截图中显示正确的颜色(F3)。顺便说一句,屏幕截图由DDMS以PNG格式捕获


换句话说,我觉得Android绘制RelativeLayout的方式不同于Android在SurfaceView中绘制矩形的方式。

如果您想要F3,您应该简单地说:

p.setColor(0xfff3f3f3);
在此页面中,您可以看到以下值:

试试:

p.setColor(Color.parseColor("#fff3f3f3"))

你的颜色有一个alpha值(透明度)。当你拍摄屏幕截图时,你保存的图像(jpg)没有alpha值

这意味着在你的应用程序中,你在屏幕截图上得到了真正的彩色蝙蝠,你得到了不同的颜色。

setDither(true)解决了我的问题。 参考号:


谢谢这篇文章中的所有人。

是的,我做到了。但是Nexus 5中显示的颜色实际上是f7f3f7。我在问题中解释了这一点。Thanks@user3820896是的,抱歉。您确定没有对surfaceview应用任何其他属性吗?也许您可以尝试实现此功能(我不知道您的结果是否会更改):通过引用资源获取颜色与硬编码整数相等。我没有更改surfaceView的属性。我猜这个问题与Android.Graphics.color和/或Android.Graphics.Paint有关。@user3820896您是否尝试在另一个设备模拟器中运行应用程序?如果您获得相同的结果,您将执行以下操作你的代码中有什么错误?设备模拟器也是如此。我正在查看Android.Graphics API。如果我找到了,我会发布我的发现。谢谢你的建议。@FrankN.Stein设备是Nexus 5,正如我在问题中所说的。我的另一个UI组件,例如RelativeLayout,将属性“Android:background”设置为background\u holo\u light(F3)。这些UI组件在Nexus 5中显示正确的颜色。我想知道Android.Graphics.Paint实际支持哪些位?Sry,这不会改变任何东西。截图由DDMS捕获,我相信它们工作正常。请参阅“编辑1”我刚刚添加了更多屏幕截图的细节。感谢您的想法当您在屏幕上看到视图时,视图包含透明度值,最终视图颜色取决于视图下的内容。例如:颜色:#000000 AA是带有透明度的“黑色”。如果该颜色下的视图为白色,则该颜色下的视图为灰色是黑色您会得到黑色。是的,但这不适用于我的问题。我在SurfaceView上绘制,因此默认情况下,SurfaceView在那里是一个洞。包含SurfaceView的视图组/视图的背景色不会影响SurfaceView。在SurfaceView上绘制的一个示例是。更清楚的是,我没有运行“setZOrderOnTop(True)”在我的SurfaceView中,“setZOrderOnTop(true)”将为SurfaceView提供透明背景。默认情况下,SurfaceView没有背景,因为我提到它是一个孔。此外,我还尝试了“p.setColor(0xF3)”绘制矩形,但结果仍然是f7f3f7。总之,在我看来,alpha值在这里似乎不是问题。
p.setColor(0xfff6f6f6);
p.setColor(0xfff7f7f7);
p.setColor(0xfff0f0f0);
p.setColor(0xffefefef);
p.setColor(0xfff3f3f3);
p.setColor(Color.parseColor("#fff3f3f3"))