0

我的游戏中有一个课程是从教程中复制的:

public class PanelThing extends SurfaceView implements SurfaceHolder.Callback
{
}

我从来没有完全理解这个类是如何工作的,但它似乎完成了这项工作,而且我的游戏已经运行了一段时间。这个 PanelThing 似乎有点像某种布局。在我的游戏的 onCreate 方法中,我有:

pt = new PanelThing(this);
game_play_layout = new LinearLayout(this);
game_play_layout.addView(pt);
setContentView(game_play_layout);

现在我需要在 pt 中有一个子布局。我试过这样做pt.addView(my_child_layout),但在 pt.addView 中未定义。是否可以修改 PanelThing,可能使用“扩展”或“实现”以便定义 addView?还是有其他方法可以向 pt 添加布局?

编辑:如果您想确切知道为什么我想要 pt 的子布局,请参阅此问题

4

2 回答 2

1

那么你不能在 SurfaceView 中有子元素。一种可能的解决方案是做类似的事情。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <PanelThing 
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

    <LinearLayout android:visibility="GONE">
    </LinearLayout>
</RelativeLayout>

您可以将横幅添加到可以放置在您喜欢的任何位置的 LinearLayout 中。希望这个解决方案有所帮助。您可以查看此线程以获得一些帮助。

于 2012-04-19T13:46:13.683 回答
1

aSurfaceView不是像这样的布局容器,LinearLayout因此您无法向其中添加视图。它更像是您一直在代码中绘制的交互式图像。

您必须将要显示的附加信息添加到您的绘图代码中,SurfaceView或者您可以SurfaceView使用FrameLayout. 确保顶部的布局在您不想阻止下面内容的区域中是透明的。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <PanelThing 
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

    < -- Layout on top here. --
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</FrameLayout>
于 2012-04-19T13:58:50.820 回答