我正在为Android构建一款绘画应用程序,扩展了SDK提供的FingerPaint应用程序示例。但是,与FingerPaint不同,我使用SurfaceView和单独的渲染线程来绘制表面。所有这些都非常标准和简单。工作得很好。然而,我想要给绘画表面一个白色背景,就像在白纸上绘画一样。默认背景颜色是黑色的。
我的SurfaceView的线程调用视图的onDraw()方法。我在这里遇到的问题是,如果我将背景颜色或背景资源设置为我的SurfaceView,当下一次呈现视图时,此背景将覆盖表面的先前绘制。我将通过一个例子来解释这个问题:
假设我将背景设置为白色。现在,应用程序启动,我的SurfaceView具有白色。好的,目前为止很好。现在,我用手指在这个表面上画了一条红色的线。这条线现在显示在白色表面上。好的。现在,这应该是一款绘画应用程序,并且假设我想画一辆车。所以,然后,我用手指画了第二条红线。第二条线被画在屏幕上,但是之前我画的第一条线消失了。也就是说,因为我在SurfaceView上设置了一些背景,所以会再次绘制背景,从而覆盖之前绘制的第一条线。现在屏幕只显示第二条线。
显然,我不希望发生这种情况。当我不尝试更改背景时,代码运行得很完美(也就是说,在默认黑色背景下,两条线都被显示出来,没有背景)。但是当我设置了一些期望的背景时,这件事就会发生。有没有办法在某种程度上拥有一个静态背景,它不会每次都被绘制?我希望仅在此背景上绘制所有后续图形。我不希望Android运行时每次绘制视图时都绘制背景,从而覆盖之前呈现的所有绘图。有没有方法可以解决这个问题?
我尝试过的方法有:
1.在XML中使用android:background设置SurfaceView的背景颜色。
2.使用样式的概念执行上述操作(指定样式值并在布局文件中引用它)。该样式仅将背景颜色定义为#FFFFFFFF(白色)。
3.将第2步的样式设置为SurfaceView的父视图(RelativeLayout)。
4.将第2步的样式设置为整个应用程序的主题,使用我的清单文件中的android:theme。
5.将SurfaceView的背景可绘制设置为纯白色图像。
6.从代码中调用setBackgroundColor为SurfaceView设置背景颜色,如this.setBackgroundColor(Color.WHITE)。
谢谢。
我的SurfaceView的线程调用视图的onDraw()方法。我在这里遇到的问题是,如果我将背景颜色或背景资源设置为我的SurfaceView,当下一次呈现视图时,此背景将覆盖表面的先前绘制。我将通过一个例子来解释这个问题:
假设我将背景设置为白色。现在,应用程序启动,我的SurfaceView具有白色。好的,目前为止很好。现在,我用手指在这个表面上画了一条红色的线。这条线现在显示在白色表面上。好的。现在,这应该是一款绘画应用程序,并且假设我想画一辆车。所以,然后,我用手指画了第二条红线。第二条线被画在屏幕上,但是之前我画的第一条线消失了。也就是说,因为我在SurfaceView上设置了一些背景,所以会再次绘制背景,从而覆盖之前绘制的第一条线。现在屏幕只显示第二条线。
显然,我不希望发生这种情况。当我不尝试更改背景时,代码运行得很完美(也就是说,在默认黑色背景下,两条线都被显示出来,没有背景)。但是当我设置了一些期望的背景时,这件事就会发生。有没有办法在某种程度上拥有一个静态背景,它不会每次都被绘制?我希望仅在此背景上绘制所有后续图形。我不希望Android运行时每次绘制视图时都绘制背景,从而覆盖之前呈现的所有绘图。有没有方法可以解决这个问题?
我尝试过的方法有:
1.在XML中使用android:background设置SurfaceView的背景颜色。
2.使用样式的概念执行上述操作(指定样式值并在布局文件中引用它)。该样式仅将背景颜色定义为#FFFFFFFF(白色)。
3.将第2步的样式设置为SurfaceView的父视图(RelativeLayout)。
4.将第2步的样式设置为整个应用程序的主题,使用我的清单文件中的android:theme。
5.将SurfaceView的背景可绘制设置为纯白色图像。
6.从代码中调用setBackgroundColor为SurfaceView设置背景颜色,如this.setBackgroundColor(Color.WHITE)。
谢谢。