在自定义surfaceView中绘制时在主活动中创建按钮

时间:2016-02-08 16:38:37

标签: java android android-studio surfaceview

在我的MainActivity中,我想处理我的按钮,在我的GameSurfaceView中我想处理绘图的东西,但我看不到我的GameSurfaceView上的按钮为什么会这样? 我的Gameloop类处理onDraw调用。 当我将ContentView设置为我的MainActivity时,我看不到我的绘图,当我将ContentView设置为我的GameSurfaceView时,我看到了图纸,但我看不到我的按钮。

如何将GameSufaceView实现到我的MainActivity?请帮我。 这是我的代码的简短形式:

这是我的MainActivity [编辑:我缩短了摘录]

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));
    }
}

这是我的自定义SurfaceView

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);
}

这是MainActivity的

<?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>

[编辑] 经过一天的搜索,我发现了一个与我类似的问题: [How to use my SurfaceView with main.xml on Android?

但我仍然看不到我在MainActivity上定义的按钮,我只看到黑屏和我正在绘制的矩形:

我将此添加到我的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"
    />

我仍然无法看到我定义的按钮,为什么会这样?有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我终于解决了我的问题。

我需要在xml文件中定义Button bevore gameSurfaceView,否则gameSurfaceView是&#34; over&#34;按钮,这就是我无法看到它的原因。