在Android中设置SurfaceView的背景色
我正在为android构建一个绘画应用程序。扩展SDK提供的FingerPaint应用程序示例。但是,与FingerPaint不同,我使用带有单独渲染线程的SurfaceView绘制曲面。所有这些都是非常标准和直接的。工作顺利。然而,我想给绘画表面一个白色的背景,就像在白纸上画画一样。默认背景为黑色。 曲面视图的线程调用视图的onDraw()方法 这里我面临的问题是,如果我将背景颜色或背景资源设置为我的SurfaceView,那么下次渲染视图时,该背景将覆盖曲面的上一个图形。我将用一个例子来解释这一点: 假设我将背景设置为白色。现在,应用程序启动,我的SurfaceView为白色。好的,到目前为止还不错。现在,我用手指在这个表面上画一条红色的线。该线现在显示在白色表面上。好。现在,这应该是一个绘画应用程序,假设我想画一辆汽车。然后,我用手指画了第二条红线。屏幕上画了第二条线,但我之前画的第一条线消失了。也就是说,因为我已经为我的SurfaceView设置了一些背景,所以再次绘制背景,从而覆盖绘制的第一行。现在,屏幕仅显示绘制的第二条线 显然,我不希望这种情况发生。当我不尝试更改背景时(即,两行都显示在默认的黑色背景上,没有有效的背景),代码可以完美地工作。但是当我设置了一些想要的背景时,事情就发生了。有没有一种方法可以让你有一个静态的背景,而不是每次都画出来?我希望只绘制一次背景,所有后续的绘图都应在此背景上进行。我不希望android运行时在每次绘制我的视图时都绘制背景,从而覆盖该视图上的所有绘图(来自以前的渲染)。有办法解决这个问题吗 我为实现这一目标所做的努力有:在Android中设置SurfaceView的背景色,android,background,background-color,surfaceview,surfaceholder,Android,Background,Background Color,Surfaceview,Surfaceholder,我正在为android构建一个绘画应用程序。扩展SDK提供的FingerPaint应用程序示例。但是,与FingerPaint不同,我使用带有单独渲染线程的SurfaceView绘制曲面。所有这些都是非常标准和直接的。工作顺利。然而,我想给绘画表面一个白色的背景,就像在白纸上画画一样。默认背景为黑色。 曲面视图的线程调用视图的onDraw()方法 这里我面临的问题是,如果我将背景颜色或背景资源设置为我的SurfaceView,那么下次渲染视图时,该背景将覆盖曲面的上一个图形。我将用一个例子来解释
谢谢。现在我还尝试将我的SurfaceView覆盖在另一个具有白色背景的视图上,并将SurfaceView设置为完全透明。我使用了FrameLayout。也就是说,一个白色背景的视图,上面覆盖的是我的SurfaceView设置为完全透明 这也没能奏效。所以现在我得出结论,SurfaceView的背景色是不能改变的。所以现在我放弃了SurfaceView,使用普通视图代替我的绘图。到目前为止,还没有观察到任何性能损失。但是,仅仅因为SurfaceView不允许我更改它的背景颜色,放弃一个高效的实现感觉有点不对 根据: 曲面是Z有序的,因此它位于保持其形状的窗口后面 表面观察;SurfaceView在其窗口上打了一个孔,以允许 要显示的曲面。视图层次结构将负责 与曲面正确合成SurfaceView的任何同级 这通常会出现在它上面。这可以用来放置 覆盖层,如表面顶部的按钮,但请注意 它会对性能产生影响,因为完全混合了alpha 每次曲面更改时都将执行合成 因此,如果通过以下方式更改曲面视图的z顺序:
setZOrderOnTop(true);
这将起作用,但是您不能将任何其他视图放在曲面视图的顶部。您找到解决方案了吗?我也有这个问题。看起来这个答案建议你可以画背景色。这对我很有用: