首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中设置SurfaceView的背景颜色

在Android中设置SurfaceView的背景颜色
EN

Stack Overflow用户
提问于 2011-12-15 08:57:38
回答 2查看 6.8K关注 0票数 7

我正在为android构建一个油漆应用程序。扩展SDK提供的FingerPaint应用程序示例。但是,与FingerPaint不同的是,我使用带有单独呈现线程的SurfaceView绘制到表面。所有这些都是非常标准和直接的。工作得很好。然而,我想给画表面画一个白色的背景,所以这就像在白纸上画画一样。默认背景是黑色的。曲面视图的线程调用视图的onDraw()方法。

我在这里面临的问题是,如果我将背景颜色或背景资源设置为我的SurfaceView,则此背景将在下一次呈现视图时覆盖该表面的先前绘图。我将以一个例子来解释这一点:

假设我把背景设置为白色。现在,应用程序开始了,我的SurfaceView具有白色。好吧,到目前为止还不错。现在,我用我的手指在这个表面画一条红色的线。这条线现在显示在白色的表面。好的。现在,这应该是一个绘画应用,假设我想画一辆车。所以,我用手指画出第二条红线。第二行画在屏幕上,但第一行,我以前画的,消失了。也就是说,因为我已经为我的SurfaceView设置了一些背景,所以会再次绘制背景,从而覆盖所绘制的第一行。现在屏幕只显示绘制的第二行。

显然,我不希望这种情况发生。当我不试图改变背景(也就是说,这两行都显示在默认的黑色背景上,没有有效的背景)时,代码工作得很好。但当我设定一些想要的背景时,事情就会发生。有没有办法有一个静态的背景,而不是每次都画?我希望背景只绘制一次,所有后续的图纸都应该发生在这个背景上。我不想让android运行时,每次它绘制我的视图时,都要绘制背景,从而覆盖以前渲染的视图上的所有当前绘图。有办法解决这个问题吗?

为了达到这一目标,我尝试了以下几点:

  1. 使用android: SurfaceView设置我的背景颜色。
  2. 以上所述,采用了风格的概念。(指定样式值并在布局文件中引用它)。这种样式只是将背景颜色定义为#FFFFFFFF (白色)。
  3. 将样式2设置为SurfaceView的父视图( RelativeLayout)。
  4. 将样式2设置为整个应用程序,作为一个主题,在我的清单文件中使用android:theme。
  5. 将我的SurfaceView的背景绘图设置为黑白相间的图像.
  6. 从代码as,setBackgroundColor (Color.WHITE)中调用SurfaceView的SurfaceView。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-20 02:52:22

根据android的文档

该曲面是Z排序的,因此它位于保持其SurfaceView的窗口后面;SurfaceView在其窗口中穿孔以允许显示其表面。视图层次结构将处理与Surface正确组合的任何通常会出现在其之上的SurfaceView的兄弟级。这可以用于在曲面顶部放置诸如按钮之类的覆盖层,但是请注意,它可能会对性能产生影响,因为每次表面变化时都会执行完全的α混合组合。

因此,如果您通过以下方法更改表面视图的z顺序:

代码语言:javascript
运行
复制
setZOrderOnTop(true);

这是可行的,但你不能将任何其他视图放在表面视图之上。

票数 2
EN

Stack Overflow用户

发布于 2011-12-16 09:39:03

现在,我还尝试将我的SurfaceView覆盖到另一个带有白色背景的视图上,并将SurfaceView设置为完全透明。我用FrameLayout来做这个。也就是说,一个白色背景的视图,覆盖在上面的是我的SurfaceView设置为完全透明。

这也不起作用。因此,现在我得出结论,SurfaceView的背景颜色是不能改变的。所以现在我已经放弃了SurfaceView,并使用了一个正常的视图,而不是我的图纸。到目前为止,还没有发现任何性能损失。但是,仅仅因为SurfaceView不允许我改变它的背景颜色,放弃高效的实现感觉是不对的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8517447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档