Android: Canvas 上的颜色与 View 上的颜色看起来不同

标签 android android-canvas

设置

我定义了以下颜色资源

<color name="background">#333333</color>

我将它应用到 LinearLayout( Activity 的 Root View )上:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     ...
     android:background="@color/background">

我还将它用作 Surface/Canvas 的背景:

private void doDraw(Canvas canvas) {
    canvas.drawColor(mContext.getResources().getColor(R.color.background));

结果

color difference

问题是 SurfaceView/Canvas 上的颜色比 LinearLayout 上的颜色更深。

如果重要的话,minSdkVersion: 10targetSdkVersion: 19

谢谢。

更新

检查生成的颜色,我确定 LinearLayout 生成了正确的颜色,并且 Canvas 比应有的颜色更暗。 Canvas 生成的颜色是 #313131 而不是 #333333

最佳答案

问题是 SurfaceView 未使用 32 位颜色渲染。

您需要获取 SurfaceViewSurfaceHolder。这可以通过 View 本身的 getHolder() 来实现。

然后只需将其设置为 32 位模式:

getHolder().setFormat(PixelFormat.RGBA_8888);

关于Android: Canvas 上的颜色与 View 上的颜色看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417869/

相关文章:

android - 使用 values 文件夹为不同的 API 版本设置不同的资源值

Android canvas画线——让线条变粗

android - Canvas 不在自定义 View 中绘制

java - 在 Canvas 中绘制不同颜色的线条

android - Android 中多次调用 ffmpeg main 失败

android - 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态?

android - 扫描 NFC 标签时启动特定 Activity

android - 如何从 Android 中的 MediaStore.Audio.Playlists 中删除播放列表

android - 将 ImageView 转换为 Canvas 的 Drawable

java - 如何在android中使用位图/可绘制而不是颜色常量