android中的SurfaceView刷新

android中的SurfaceView刷新,android,graphics,surfaceview,Android,Graphics,Surfaceview,我正在开发一个需要扩展SurfaceView的应用程序。现在我在重新绘制视图时遇到了一些问题 对于普通的android.view.view,我将覆盖onDraw()方法,将我所有的图形登录都放在这个方法中。并在需要重新绘制时调用invalidate()方法 但是浮面观呢?似乎可以使用postInvalidate()调用它的重画。但是我可以把图形逻辑放在哪里呢 我是否应该将graphci登录名设置为Surface.Callback.surfaceCreated()?如果是这样,当我调用方法post

我正在开发一个需要扩展SurfaceView的应用程序。现在我在重新绘制视图时遇到了一些问题

对于普通的android.view.view,我将覆盖
onDraw()
方法,将我所有的图形登录都放在这个方法中。并在需要重新绘制时调用
invalidate()
方法

但是浮面观呢?似乎可以使用
postInvalidate()
调用它的重画。但是我可以把图形逻辑放在哪里呢


我是否应该将graphci登录名设置为
Surface.Callback.surfaceCreated()
?如果是这样,当我调用方法
postInvalidate()
时,它是否会在内部调用
surfaceCreated()
?如果没有,如何修复它?

对于SurfaceView,您应该创建第二个类,该类将创建用于管理游戏性和渲染的背景线程,以便在渲染时锁定屏幕,因此没有任何东西可以中断它,并且您将把图形逻辑放在扩展SurfaceView的第一个类上。下面的链接似乎用示例代码详细解释了它

那么这是否意味着您不需要调用surfaceview的
postInvalidate()
方法,因为您可以控制新线程中的绘图逻辑,该线程将一直绘制?是的,您不需要。因为在另一个线程上,您只需锁定画布,在画布上绘制,然后解锁并发布,这更像是两个缓冲区渲染,您在一个缓冲区上计算并绘制,而另一个缓冲区当前在屏幕上渲染,然后它们交换。@Onur A.但是,如果一个游戏是国际象棋或纸牌游戏,你不需要不停地渲染屏幕,浪费处理能力。那么,有没有一种方法可以使SurfaceView需要根据需要重新绘制的区域无效?@Onur a。但是:我找到了一种简单的方法:1。不要使用线程机制;2.创建自己的Draw()方法,并在需要时手动调用它;D.Draw()必须首先锁定曲面[Canvas Canvas=holder.lockCanvas();],然后在其上绘制[drawItAll(Canvas);],最后解锁[holder.unlockCanvasAndPost(Canvas);]。对于非真实时间游戏,您的解决方案可能会节省时间,但这实际上是游戏循环的模式