2012-08-26 4 views
4

그래서 GLSurfaceView.Renderer에서 렌더링 된 내 애플 리케이션의 GLSurfaceView를 가지고 있고 JPCt를 라이브러리로 사용하고 있습니다.GL Surface and Visibility : Gone

표면이 보이지 않는 RelativeLayout (visibility : gone) 상태입니다. 가시성을 "가시성"으로 변경 한 다음 "사라짐"으로 되돌리면 레이아웃이 예상대로 표시 및 숨기기는하지만 GLSurfaceView는 표시하지 않고 숨기지 않습니다. 이제는 항목을 클릭 할 수 있지만 "그 뒤에.

그래픽 버퍼 문제가있는 것 같지만 작동하도록하는 방법을 찾지 못했습니다 ... 어떤 아이디어입니까? 감사합니다.

답변

8

SurfaceView (및 확장자는 GLSurfaceView)은 Android의 흥미로운 동물입니다. 안드로이드의 javadoc에서 인용은 : 그것의 서피스 뷰 SurfaceView를 들고 창 뒤에 있도록

표면은 Z가 주문한; SurfaceView는 윈도우에 구멍을 뚫어 표면을 표시 할 수있게합니다. 뷰 계층 구조를 올바르게 표면에 일반적으로 그 위에

안드로이드에 나타날 것 서피스 뷰 SurfaceView 의 형제 자매를 내장 윈도우 컴포 지터를했다 합성 처리됩니다 (창 여기 조금 다른 의미를가집니다) . 상태 표시 줄은 창으로, 활동에는 하나의 창이 있습니다. 그러나 액티비티에 표면 뷰가 포함 된 경우 표면을 고정하기위한 또 다른 창이 생성되고 앤드 로이드 컴포 지터는 표면 창에 대한 뷰를 창에 그립니다. 따라서 SurfaceView은 실제로 투명한 영역입니다. 숨기면 영역이 그려지지 않고 감동에 반응하지 않지만 서피스 창이 여전히 존재하며 안드로이드는 창을 숨길 정도로 영리하지 않습니다.

나는 당신의 표면에 반투명 확인이 개 솔루션

  • 를 추천 할 것입니다. 당신이 완전히 뷰 계층 구조의 또 다른 조금 해키 방법은 GLSurfaceView를 서브 클래스와 GONEonDetachedFromWindow() 때 가시성이 변경을 호출하는 것입니다
  • 에서보기를 제거 뷰 (Android, Transparent sub-GLSurfaceView in layout?)
  • 를 숨길 필요로 할 때 당신은 다음 빈 표면을 렌더링 할 수 있습니다. 나는 이것을 테스트하지 않았고 작동하지 않을 수도 있습니다.
+1

감사합니다. 멋진 답변 ... 나는 해결책 # 2를갔습니다! – arvere

+0

솔루션 1을 투명 색상으로 렌더링했습니다. 많은 감사 – Behnam

+1

또 다른 가능한 대답은 setX (view.getMeasuredWidth()) 행을 따라 무언가를 한 다음 화면에서 다시 원할 때 setX (0)을 사용하여 화면에서 완전히 렌더링하는 것입니다. 이것은 반투명의 배경을 원하지 않거나 뷰를 올바르게 측정해야하는 경우에 유용합니다 (연결되어 있지 않을 때 얻을 수 없음). –

관련 문제