2015-01-11 4 views
1

GLSurfaceView가 있고 메뉴를 나타내는 버튼이있는 작은 LinearLayout이 있습니다. 이 레이아웃은 기본적으로 숨겨져 있으며 사용자가 일부 버튼을 탭하면 화면 하단에서 (TranslateAnimation에 의해) 나타납니다. (또한 애니메이션없이 보여 주려고했는데 성공하지 못했습니다.)GLSurfaceView가 일부 장치에서 보이지 않는 경우 표시

모든 기능은 모든 장치와 에뮬레이터에서 제대로 작동합니다. 그러나 사용자로부터 피드백을 받았는데 메뉴가 전혀 표시되지 않거나 때로는 5-10 회 탭 후에 나타날 수 있습니다.

아마, 어떤 이유로 인해 gl 표면이 활성 계층 위에 렌더링되었지만 뒤에 있어야합니다.

문제가있는 장치로는 Huawei y300 (Android 4.1.1), LG Optimus L5 (Galaxy Tab 7.7 SCH-I815), 다른 장치 및 Android 버전에서 많은 보고서가 있지만이를 재현 할 수 없습니다.

설정 :

나는 (거짓) (참) setZOrderMediaOverlay 및 setZOrderOnTop을 시도
view.getHolder().setFormat(PixelFormat.RGBX_8888); 
view.setEGLConfigChooser(8, 8, 8, 8, 0, 0); // alpha set to 8, else crash on Genymotion emulator 
// tried to comment 2 lines above - no success 
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

- 도움이되지 않았다.

도움 주셔서 감사합니다.

+0

레이어가 z- 순서 willy-nilly 변경되지 않습니다. 내 추측으로 이것은 GLSurfaceView 레이어가 아니라 다른 UI 요소가 그려지지 않은 것입니다. 레이어가 잘못 구성된 경우 메뉴가 여러 번 시도한 후에 가끔 나타나지 않고 * 표시되지 않습니다. 애니메이션 레이아웃에 집중해야합니다. – fadden

+0

OpenGL을 사용하지 않는 모드 - 일반적인보기에서 캔버스로 렌더링 된 게임, 레이아웃 계층 구조가 정확히 같음,이 모드에서는 문제가있는 장치에서 모두 올바르게 작동합니다. 동적으로 추가되지 않은 뷰도 표시/숨기기 만하므로 z 순서는 변경되지 않습니다. 그래서 저는 하드웨어에 의존하는 일반적인보기로 GLSurface를 구성 할 때의 문제를 생각합니다. – ucdevs

+0

당신은이 문제가 직면하고 있습니다. 오픈 GL의 한 가지 버전만을 고려하여 게임을 개발했습니다. 새로운 기기에는 2.0 및 최신 3.0이 있습니다. 그래서, 이것이 GL이 제대로 작동하지 않는 문제 일 수 있습니다. – NovusMobile

답변

3

해결책을 찾았습니다. 문제가있는 장치를 가지고 테스트했습니다.

레이어 블렌딩이 수행되어야하는 마스크 영역과 같이 더러운 정사각형을 사용하는 일부 까다로운 최적화가 있지만 필요할 때 이러한 rect가 업데이트되지 않습니다. 숨겨진 뷰를 표시 한 후에 parentView.requestLayout()을 호출하면 이러한 더러운 선의 유효성을 검사해야합니다.

5 ~ 10 회 탭 한 후에 나타나는 메뉴에 대한 설명은 간혹 광고 배너 업데이트 (또는 다른 이벤트)인데 이는 아마도 requestLayout을 호출합니다.