[英]Render a new view when a button is clicked in Android Studio
我为我的应用程序创建了一个菜单页面,其中有 4 个按钮,每个按钮具有不同的功能。 在添加此菜单页面之前,我的代码在 activity_main.xml 中如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//sets full screen
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//set no title
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(new GameSurface(this));
现在我有了这个菜单页面,其中有 4 个按钮,我在 MainActivity 类中按以下方式将这些按钮分配给了一个变量(仅显示了一个用于示例目的)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button newGameBtn = findViewById(R.id.new_game_btn);
然后我像这样创建了 onclick 侦听器
newGameBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
我尝试了不同的方法来加载 GameSurface 类(加载游戏之前的类),它扩展 SurfaceView 并实现 SurfaceHolder.Callback。 任何建议将不胜感激。
GameSurface
对象不在活动的布局层次结构中,因此可以通过以下两种方式实现:
在activity_main.xml
添加您的表面视图
<root> <packgename.GameSurface android:id="@+id/game_surfce_view" .../> </root>
然后使用
GameSurface gameView = findViewById(R.id.game_surface_view);
为了解决这个问题,我采取了以下步骤。
在我的 MainActivity 中,我添加了以下代码:
public class MainActivity extends AppCompatActivity {
private Context mContext = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button newScreen = (Button) findViewById(R.id.new_game_btn);
Button exit = (Button) findViewById(R.id.exit_btn);
newScreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, GameActivity.class);
mContext.startActivity(intent);
}
});
GameActivity 类包含我在 MainActivity 中使用的上述代码来运行我的表面视图,如下所示以供参考。
//Launches a surface view
public class GameActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//sets full screen
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//set no title
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(new GameSurface(this));
}
}
而我的 GameSurface 类是扩展 SurfaceView 的类,并且是包含游戏逻辑的地方。 应该注意的是,为了做到这一点,我必须创建一个 activity_game.xml 文件并将其与我的游戏表面视图链接,如下所示:
<FrameLayout 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" android:background="#0099cc" tools:context=".GameActivity">
<com.example.fxgame.GameSurface
android:id="@+id/mainview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
这在实现后仍然不起作用,但是使用输出日志我发现我还没有将从 MainActivity 引用的活动添加到我的 android 清单中,其中定义了活动。 通过在标记中添加以下代码行来纠正此问题:
<activity android:name=".GameActivity" />
我花了一整天的时间来解决这个问题,所以我希望它可以帮助其他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.