使用 SurfaceView 的背景图像

Background image working with SurfaceView

使用 SurfaceView 制作 2d 游戏我不知道谁可以有效地将背景图像放入其中。 我想避免每一帧都绘制它,因为它是静态图像,有什么帮助吗?

SurfaceView的Surface是单层的。当您锁定 Canvas 时,您可以指定一个脏矩形以减少绘制区域,但您必须在每一帧绘制矩形中的所有内容——背景和所有内容。

您可以使用一对 SurfaceView,一个按默认 Z 顺序,一个在 "media" 深度。使用 SurfaceView.setZOrderMediaOverlay() 来做到这一点。层将在渲染前由系统合成。

如果您使用的是 OpenGL ES 而不是 Canvas,通常每次只从纹理重绘背景会更有效。 (如果 HWC 用完了叠加层,那基本上就是 SurfaceFlinger 正在做的事情。)

有关使用多个重叠表面的示例,请参阅 Grafika 中的 "multi-surface test"。