【问题标题】:Overlay an Android layout on a surfaceview在 SurfaceView 上覆盖 Android 布局
【发布时间】:2011-04-26 18:12:18
【问题描述】:
我正在使用与 Google 提供的 Lunar Lander 示例类似的表面视图设计一个简单的 Android 游戏。我希望在屏幕上弹出各种内容,例如高分、消息、菜单等,而表面视图仍在后台。
问题是我希望“弹出窗口”包含许多设计元素,例如图像、文本框等。有没有一种方法可以在 XML 中创建布局来设计我想要的弹出窗口,然后将其显示在上面将表面视图作为一个对象,而不必在代码中一个一个地构造每个单独的元素并将它们全部绘制到画布上?
我想从屏幕一侧为弹出窗口设置动画,所以如果我在 XML 中设计布局以便所有对象都知道它们彼此之间的关系,然后将该布局作为一个对象进行动画处理,那将是一件好事。
这让我觉得很简单,但我似乎无法找到实现它的方法。
【问题讨论】:
标签:
android
layout
overlay
surfaceview
【解决方案1】:
这样做的一个简单方法是将弹出界面创建为不同的 Activity。然后,您将在清单文件中为其提供透明背景主题,例如对话框主题。
查看 API 演示中的 CustomDialog、Translucent 和 TranslucientBlur 示例。他们创造了这样的活动。底层活动位于表面这一事实不应该改变任何事情。
【解决方案2】:
您可以在代码或 XML 布局中将元素覆盖在 SurfaceView 之上。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<android.view.SurfaceView
android:id="@+id/mysurface"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</android.view.SurfaceView>
</FrameLayout>
在你的活动中:
TextView myText = new TextView(this);
myText.setText("Something");
addContentView(myText, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
不知道性能问题。