2

최근의 책 (모바일 게임 및 그래픽 개발을위한 OpenGL ES 알아보기)의 예제와 기본 액티비티에 프로그래밍 방식으로 새 레이아웃 (설정 레이아웃이라고 부름)을 추가하고 다음을 제안합니다.GLSurfaceView에 xml 레이아웃을 중첩하는 가장 좋은 방법은 무엇입니까?

LayoutInflater settingsInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View settingsLayoutView = settingsInflater.inflate(R.layout.mySettingsLayout,settingsLayout,false); 
settingsLayout.addView(settingsLayoutView); 
addContentView(settingsLayout,settingsLayoutParams); 

잘 작동하지만 내 작업 표시 줄 메뉴 항목 중 하나의 콜백에 추가 했으므로 뒤로 단추를 사용하면이보기를 제거 할 수 있습니다. 지금까지 두통이 많이 발생했습니다.

한편 동적 뷰 (백 스택 등에 추가 가능)를 구현하는 가장 자연스러운 방법은 조각을 사용하는 것입니다. 그러나 조각은 레이아웃에 속해야하며, 현재 내 코드는 레이아웃을 전혀 사용하지 않고 GLSurfaceView를 내 주요 활동의 콘텐츠보기로 직접 할당합니다. GLSurfaceView는 View의 서브 클래스이기 때문에 (View Group이 아님), 조각과 같은 자식을 생성하는 데 사용할 수 없습니다.

이 책의 저자는이 접근법이 "세련된"것으로 주장하지만 GLSurfaceView를 콘텐츠보기로 직접 할당 할 다른 이유는 제시하지 않습니다. 알고 있어야 할 성능 문제가 있습니까? 또는 내 GLSurfaceView와 이후 생성 된 뷰가 모두 속한 "마스터"레이아웃을 만드는 것이 "세련된"것인가?

버튼, 텍스트 상자 등을 내 GLSurfaceView 위에 동적으로 나타나고 사라지게하는 좀 더 자연스러운 방법이 있습니까?

+0

지금은 "호스트"뷰 그룹으로 별도의 레이아웃을 만든 다음 해당 레이아웃 내부에 내 GLSurfaceView가 setContentView를 가져 오는 조각이 있습니다. 그런 다음 다른 조각이 프로그래밍 방식으로 만들어집니다. 그게 효과가있는 것 같지만, 그것이 성능면에서 가장 좋은 방법인지 알고 싶습니다. – djphd

답변

1

특정 성능 우려 사항이 무엇인지 모르겠습니다 - View 개체 렌더링 또는 GL 렌더링? 당신이하는 일은 GL 렌더링의 성능에 영향을 미칠 것입니다 (아마 윈도우의 크기를 변경하는 것을 제외하고).

SurfaceViewGLSurfaceView은 레이아웃을 계산할 때 다른 요소에서 사용하는 투명한 "자리 표시 자"를 제공하지만 실제 픽셀은 별도 레이어에 그려집니다. 이것이 SurfaceView이 모든 View 요소 뒤에 있거나 앞쪽에있는 이유입니다. 레이어가 최종 디스플레이 이미지를 생성하는 시스템 합성기 (SurfaceFlinger)로 전달됩니다.

+0

나는 원래 특정 픽셀이 그려지는 횟수에 대해 염려했다. 나는 하드웨어가 실제로이 모든 것을 실제로 어떻게 처리 하는지를 배우고있다. 이것은 내가 읽은 몇 가지 사항을 명확히합니다. 감사합니다! 내 조각 솔루션이 잘 작동하는 것 같고 전혀 느려지지 않았다. – djphd