SurfaceView가있는 앱을 실행 중입니다. 표면보기가 표시되면 '전원'버튼을 눌러 휴대 전화를 잠그고 원근감이 해제 된 앱으로 돌아갑니다. 그것은 내 "짧고 넓은"견해의 왼쪽에 "키가 크고 마른 체형"의 모습을 나타내는 것처럼 보입니다.레이아웃 잠김 후 Open GL SurfaceView 레이아웃 문제
onSurfaceChanged를 보면 전화가 'width = 480 height = 800'으로 전원이 켜지면 한 번 호출되고 'width = 800 height = 480'으로 전화가 풀린 후에 다시 호출됩니다. onSurfaceChanged에서 수집 한 정확한 새로운 너비/높이 데이터로 각 프레임을 gl.glFrustumf()라고 부르지 만, 무언가 여전히 내 창은 마른 체형과 키가 큰 것처럼 보입니다.
편집 : 아마 내 뷰 구조와 관련이 있습니다. 활동에있는 contentView가 MAINVIEW라고
.. 2
MainView
/ \
UIView SurfaceView (I look wrong)
/
UI Elements
(These all look correct)
편집 번호 :
스크린 샷 :
글로브와 버튼 '추가 다운로드'가 그려집니다 3d. Square in은 UI보기의 하위 항목입니다 (UIView의 다른 하위 항목도 올바르게 표시됩니다). SurfaceView가 너비가 높이이고 너비가 너비라고 생각하는 것처럼 보입니다. 나는 표면보기의 폭과 높이를 더 인쇄를했고,이 출력 얻을 :
--Phone On Unlock Screen
--Activity onWindowFocusChanged called
I/System.out(8817): ***********UI Width: 480 UI Height: 800
I/System.out(8817): ***********Main Width: 480 Main Height: 800
I/System.out(8817): ***********GL Width: 480 GL Height: 800
--App continues to run. These are triggered in GLSurfaceView onLayout
I/System.out(8061): ***********UI Width: 800 UI Height: 480
I/System.out(8061): ***********Main Width: 800 Main Height: 480
I/System.out(8061): ***********GL Width: 800 GL Height: 480
I/System.out(8061): ***********UI Width: 800 UI Height: 480
I/System.out(8061): ***********Main Width: 800 Main Height: 480
I/System.out(8061): ***********GL Width: 800 GL Height: 480
그래서 너비와 높이가 언젠가 onWindowFocusChanged 후 자신을 해결하기 위해 나타나지만 그래픽이 제대로 표시되지 않습니다를.
편집 # 3 : 그런 다음
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
:
public void onSurfaceChanged(GL10 gl, int width, int height) {
mWidth = width;
mHeight = height;
mAspectRatio = (float) width/height;
mSurfaceChangedID++;
}
I I 투사 내가 설정 2D UI 요소로 뭔가 3D 렌더링 아이디어와 다른 캔버스는 onDraw
의 각 프레임을 갖고 있기 때문에public void onDrawFrame(GL10 gl) {
gl.glClearColor(mClearColorR, mClearColorG, mClearColorB, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
for(each item) {
if(item.Is3d()) {
//For 3d Elements:
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(mAspectRatio*-mHalfViewAngleTan, mAspectRatio*mHalfViewAngleTan, -mHalfViewAngleTan, mHalfViewAngleTan, mNearZClip, mFarZClip);
//Enable Lighting, Setup fog
...
} else {
//For UI Elements:
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(-0.5f*mAspectRatio, 0.5f*mAspectRatio, -0.5f, 0.5f, -1, 1);
//Disable Lighting, Disable fog, Setup blending
...
}
//Setup client state and vertex buffers
...
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, mdl.getVtxCount());
}
}
편집 # 4 :
,363,210... 그것은는 ...
getMainView().addView(m3DView);
그것은 지금
... 그것은 내가 서피스 뷰 SurfaceView가 상위에 추가하는 방법을 변경,보기 함께 할 수 있었나요 밝혀
// add to parent view
{
Display display = getWindow().getWindowManager().getDefaultDisplay();
android.widget.AbsoluteLayout absLayout = new android.widget.AbsoluteLayout(this);
absLayout.setLayoutParams(new android.view.ViewGroup.LayoutParams(display.getWidth(), display.getHeight()));
absLayout.addView(m3DView, new android.view.ViewGroup.LayoutParams(display.getWidth(), display.getHeight()));
getMainView().addView(absLayout);
}
나는 onPause와 onResume을 이미 호출하고 있었지만 많이 변경하지는 않았다. - 전화 잠금 해제 후 SurfaceView의 getWidth 및 getHeight를 인쇄하면 w = 480 h = 800 대신 다른 방법으로 나는보기를 잘못 관리하고있는 것처럼 느낍니다. – TurqMage
아 .. 죄송합니다. 정말 요점을 놓쳤습니다. 스크린 샷을 게시하여 "날씬하고 키가 큰"것을 의미 할 수 있습니다. – Yuriy
more info로 편집 – TurqMage