在SurfaceView上分层视图

时间:2013-07-21 18:42:39

标签: android android-canvas

我正在尝试构建一个简单的游戏。我有一个SurfaceView,我在其上绘制游戏的背景:

Canvas canvas = surfaceHolder.lockCanvas();
//draw on canvas....
surfaceHolder.unlockCanvasAndPost(canvas);

我有一个View,我想在SurfaceView上面“分层”,但我仍然希望能够看到它下面的背景。如何在SurfaceView顶部绘制视图。 View有自己的onDraw方法,带有相关的画布,所以我假设我需要将View放在SurfaceView的顶部,我在哪里绘制背景?

1 个答案:

答案 0 :(得分:0)

可能有一种更有效的方法来实现这一点,但是当将视图堆叠在一起时,您可以将SurfaceView放在FrameLayout中,然后将所需的视图放在SurfaceView之后的顶部XML,但仍然在FrameLayout内(意思是它稍后绘制,因此在顶部)。这将完成你想要的堆叠。

如果您希望将视图放置在SurfaceView顶部以外的任何位置,而不是与其完全匹配,或者在左上角,那么您可以使用RelativeLayout,在其中使用alightParentLeft,alightParentTop,alignParentBottom和alightParentRight布局SurfaceView都设置为true。然后在xml中的SurfaceView之后再次显示您希望绘制的视图将在顶部绘制它,并且您可以将它放在任何您想要的位置。

现在,您希望通过SurfaceView查看顶部的视图,您可以通过设置它的alpha值来实现。如果你的目标是3.0+你可以使用视图的.setAlpha方法,但如果你的目标是降低,你可以设置一个零毫秒的AlphaAnimation来设置视图的alpha(可能有更好的方法来做到这一点,但这是我在蜂窝前设置alpha的唯一方法。

希望这有帮助!祝你好运!