这是我申请的结构。
MainActivity.java calls FragmentActivity.java,
FragmentActivity.java calls GameView.java
GameView.java calls Thread.java.
基本上所有游戏逻辑都将由GameView及其线程处理。 当方向改变时,我不知道如何防止重新启动游戏。
如果我暂停线程并恢复它,应用程序崩溃,我也不能在Gameview.java中使用onSaveInstanceState方法
任何帮助?
答案 0 :(得分:1)
完全有可能通过Android清单。 只需添加活动声明,您要在其中禁用重新启动以下属性:
android:configChanges="orientation|screenSize"
然后你可以覆盖活动中的onConfigurationChanged()
,然后你就会收到刚发生的事件的回调。在您的情况下,方向更改。使用此方法,当您的方向发生变化时,活动不会重新开始。
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:0)
您正在寻找onResume()和暂停()...您在暂停时将值存储到一个包中,并在resume方法上实例化这些值并显示一个对话框,因为这会阻止用户注意到这一点。
答案 2 :(得分:0)
通过在清单文件中定义Application
类并覆盖公共方法onConfigurationChanged()
,您可以控制方向更改的内容。
需要维护全局应用程序状态的基类。 您可以通过在您的名称中指定其名称来提供自己的实现 AndroidManifest.xml的标记,它将导致该类 在你的过程中为你实例化 应用程序/包已创建。
您只需要检查newConfig == Configuration.ORIENTATION_LANDSCAPE
等。此时,您可能需要重新加载资源以使工作正常。