在自定义 surfaceView 中绘制时在 main activity 中创建按钮
creating buttons in main activity while drawing in custom surfaceView
在我的 MainActivity 中,我想处理我的按钮,在我的 GameSurfaceView 中,我想处理绘图内容,但我在 GameSurfaceView 上看不到按钮,这是为什么?
我的 Gameloop Class 处理 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 文件
<?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"
/>
我仍然看不到我定义的按钮,这是为什么?有人可以帮助我吗?
终于解决了我的问题
我需要在 xml 文件中定义 gameSurfaceView 之前的按钮,否则 gameSurfaceView 就是 "over" 按钮,这就是我看不到它的原因。
在我的 MainActivity 中,我想处理我的按钮,在我的 GameSurfaceView 中,我想处理绘图内容,但我在 GameSurfaceView 上看不到按钮,这是为什么? 我的 Gameloop Class 处理 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 文件<?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"
/>
我仍然看不到我定义的按钮,这是为什么?有人可以帮助我吗?
终于解决了我的问题
我需要在 xml 文件中定义 gameSurfaceView 之前的按钮,否则 gameSurfaceView 就是 "over" 按钮,这就是我看不到它的原因。