如果我按下我的Android手机上的电源按钮(或等待它超时)并且手机进入睡眠状态,在重新唤醒之后,屏幕宽高比完全没有了.
截图:
破碎

正确

在GameActivity.onCreate()中
// Grab display info
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
ACTUAL_SCREEN_WIDTH = (int) dm.widthPixels;
ACTUAL_SCREEN_HEIGHT = (int) dm.heightPixels;
ACTUAL_DENSITY = dm.density;
double scale = ((double) MainMenuActivity.resolutionScale / 100.0);
SCREEN_WIDTH = (int) (ACTUAL_SCREEN_WIDTH * scale);
SCREEN_HEIGHT = (int) (ACTUAL_SCREEN_HEIGHT * scale);
DENSITY = ACTUAL_DENSITY * scale;
// Setup graphics
requestWindowFeature(Window.FEATURE_NO_TITLE);
surface_view = new GLSurfaceView(this);
if (SCREEN_WIDTH != ACTUAL_SCREEN_WIDTH
|| SCREEN_HEIGHT != ACTUAL_SCREEN_HEIGHT)
surface_view.getSurfaceHolder().setFixedSize(SCREEN_WIDTH,
SCREEN_HEIGHT);
Run Code Online (Sandbox Code Playgroud)
我正在GLSurfaceView中正确地重新加载所有内容(即回击主页并返回游戏重新加载纹理等).
我在onWindowFocusChanged中打印出了方向,它是横向的(如预期的那样).
如果我不使用setFixedSize(即,如果resolutionScale为100),则不会出现此问题.此外,如果游戏前面出现另一个窗口(如偏好设置窗口),然后您返回游戏,问题就会消失.
提前致谢.自从研究枯竭以来,我一直在尝试随机的东西大约一个小时.
我正在研究这个问题,此时它似乎是一个与SurfaceHolder.setFixedSize()相关的Android错误.
我要做的就是获取这些日志:等待游戏加载,推动电源,让屏幕变为空白,再次推动电源(快速),解锁幻灯片(快速).顺便说一句,这是关于HTC Thunderbolt 2.3.4的.
这是正常的事件过程(不使用setFixedSize):
----- power button pushed ------
JavaMain: onPause: called, thread: 1
ActivityManager: Config changed: { scale=1.0 imsi=310/12 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=1509 skin=default}
JavaMain: onConfigurationChanged, orientation: 1 thread: 1
JavaMain: mSView(old): 800x480
JavaMain: surfaceChanged: width: 480, height:800, thread: 1
JavaMain: onWindowFocusChanged: called, thread: 1
(screen is now off)
------ power button pushed, and slide-lock undone -----
JavaMain: onResume: called, thread: 1
ActivityManager: Config changed: { scale=1.0 imsi=310/12 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=1510 skin=default}
JavaMain: onConfigurationChanged, orientation: 2 thread: 1
JavaMain: mSView(old): 480x800
JavaMain: onWindowFocusChanged: called, thread: 1
JavaMain: surfaceChanged: width: 800, height:480, thread: 1
(back in game)
Run Code Online (Sandbox Code Playgroud)
请注意,在onPause之后,我的表面视图将重做为纵向,而在onResume之后,它将更改回横向.我将screenOrientation设置为清单中的横向.
现在看看在同一序列中发生了什么,但现在使用了SurfaceHolder.setFixedSize()(以降低分辨率):
----- power button pushed -------
JavaMain: onPause: called, thread: 1
ActivityManager: Config changed: { scale=1.0 imsi=310/12 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=1513 skin=default}
JavaMain: onConfigurationChanged, orientation: 1 thread: 1
JavaMain: mSView(old): 800x480
JavaMain: surfaceChanged: width: 640, height:384, thread: 1
JavaMain: onWindowFocusChanged: called, thread: 1
(screen is now off)
------ power button pushed, and slide-lock undone -----
JavaMain: onResume: called, thread: 1
ActivityManager: Config changed: { scale=1.0 imsi=310/12 loc=en_US touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=1514 skin=default}
JavaMain: onConfigurationChanged, orientation: 2 thread: 1
JavaMain: mSView(old): 480x800
JavaMain: onWindowFocusChanged: called, thread: 1
(back in game, with a messed up screen as in OP)
Run Code Online (Sandbox Code Playgroud)
现在请注意,在onPause之后,surfaceChanged反映了我指定的固定大小,但是在onResume上,表面视图是纵向(有点意外).但真正缺少的是使用我的固定大小参数的surfaceChanged调用.在你问之前,没有在onConfigurationChanged()中做.setFixedSize()没有任何效果.
实际上,解决方案归结为恢复(实际上,从不允许任何更改)我的表面视图.这是通过在onConfigurationChanged中为您的活动进行超级调用后添加以下两行来实现的.(Asumming您有以下清单设置集).
android:configChanges="orientation"
android:screenOrientation="landscape"
Run Code Online (Sandbox Code Playgroud)
这有效地防止了表面视图尺寸被设置为其他任何东西(例如肖像).顺便提一下,当我指定screenOrientation = landscape !!!时,我想要的是什么!(我在这看着你,谷歌)
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// -- stomp any attempts by the OS to resize my view.
// -- Hardcoded values for illustration only. In real life
// -- you'll need to save these when the surface view is originally created
mSView.getLayoutParams().width = 800;
mSView.getLayoutParams().height = 480;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |