在我的主活动中,我想处理我的按钮,在我的游戏表面视图中,我想处理绘图内容,但我看不到我的游戏表面视图上的按钮,为什么会这样?我的游戏循环类处理 onDraw 调用。当我将 ContentView 设置为 MainActivity 时,我看不到我的绘图;当我将 ContentView 设置为我的 GameSurfaceView 时,我看到了绘图,但看不到我的按钮。
如何将 GameSufaceView 实现到我的主活动中?请帮助我。这是我的代码的缩写形式:
这是我的主要活动[编辑:我缩短了摘录]
public class MainActivity extends AppCompatActivity {
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.btn1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
setContentView(new GameSurfaceView(this));
}
}
这是我的自定义表面视图
public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback{
private Context context;
public GameSurfaceView(Context context){
super(context);
getHolder().addCallback(this);
this.context = context;
setFocusable(true);
}
@Override
public void onDraw(Canvas canvas){
canvas.drawRect(60, 60, 100, 100, p);
}
这是来自主活动的 xml 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:screenOrientation="landscape"
android:orientation="horizontal"
>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn1"
android:layout_gravity="center_vertical" />
</LinearLayout>
[编辑]经过一天的搜索,我发现了一个与我类似的问题:[如何在Android上使用我的SurfaceView与main.xml?
但是我仍然看不到我在 MainActivity 上定义的按钮,我只看到一个黑屏和我正在绘制的矩形:
我将其添加到我的主活动gameSurfaceView = (GameSurfaceView) findViewById(R.id.gameSurfaceView);
并删除了setContentView(new GameSurfaceView(this));
我在我的 xml 文件中添加了以下代码:
<com.example.joschi.tryout.GameSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/gameSurfaceView"
/>
我仍然看不到我定义的按钮,这是为什么?有人可以帮助我吗?
我终于解决了我的问题。
我需要在xml文件中定义gameSurfaceView的按钮,否则gameSurfaceView将"超过"按钮,这就是我看不到它的原因。