我有一个名为GameLoop的Activity(扩展Activity的类)。 但是我没有使用xml文件进行布局,而是使用了一个类,因为我希望能够绘制到画布。 (我在某些教程中看到过这是你应该做的事情)
布局类名为GameLoopLayout。
我在布局类中运行了一个游戏循环,我可以将位图渲染到屏幕并控制FPS,一切都很好。 但现在我想添加一个按钮,但由于我没有使用xml布局文件,我不知道该怎么做。有人可以帮帮我吗?
我正在做什么:
GameLoopLayout:
Button button;
Canvas canvas;
SurfaceHolder surfaceHolder;
public GameLoopActivityLayout(Context context) {
//all necessary initializations here...
button = new Button(context);
button.setEnabled(true);
button.setLeft(10);
button.setTop(20);
}
//render function called during game loop
private void render() {
if (!surfaceHolder.getSurface().isValid())
return;
canvas = surfaceHolder.lockCanvas();
//draw all game objects to canvas...
button.draw(canvas);
surfaceHolder.unlockCanvasAndPost(canvas);
}
答案 0 :(得分:4)
尝试以下代码:
LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2);
// add button
Button b = new Button(this);
b.setText("Button added dynamically!");
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
b.setId(MY_BUTTON);
b.setOnClickListener(this);
ll.addView(b);
答案 1 :(得分:1)
创建自定义视图不会阻止您使用XML布局。例如:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.yourpackage.GameLoopLayout
android:id="@+id/game_loop_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
... />
</FrameLayout>
您可以使用边距和android:layout_gravity
将按钮放在任意位置。
在代码中,您可以像访问任何其他视图一样访问GameLoopLayout
:
// inside of onCreate()
mGameLoopLayout = (GameLoopLayout) findViewById(R.id.game_loop_layout);
// do setup with GameLoopLayout