본문 바로가기

GRAPHICS/OpenGL ES

[OPENGL ES] 안드로이드에서 SurfaceView의 배경 투명하게 Draw하기

안드로이드 앱에서 사용하는 OpenGL ES 뷰인 SurfaceView의 배경을 투명하게 하고자 시행착오를 좀 겪었는데


최종적으로 얻은 결과는 결과적으로 뷰의 배경은 투명하게 할 수 있었으나, SurfaceView가 무조건 레이아웃의


최상단을 차지하게 된다는 점이다.



구현방법은 우선 SurfaceView 클래스를 참조하는 부분에서

setZOrderOnTop(true);
setEGLConfigChooser(8,8,8,8,16,0);
getHolder().setFormat(PixelFormat.RGBA_8888);
getHolder().setFormat(PixelFormat.TRANSLUCENT);

네가지 요소를 추가한다. PixelFormat.TRANSLUCENT의 경우에는 추가해주지 않아도 투명한 배경을 만드는데 


필수적인진 않을 것이다.



다음은 직접적으로 그리는 부분들이 선언돼 있는 SurfaceView 클래스에서


onSurfaceCreated() 의 첫부분에


그리고 onDrawFrame() 의 마지막 부분에


gl.glClearColor(0f, 0f, 0f, 0f);

를 추가하면 된다.



겨우 배경을 투명하게 하는데는 성공했는데, 최상단에만 위치하게 된다는 점에서 도로 무용지물이 되버린 느낌이다..

(SurfaceView 위에 그려야 하는 요소가 있어서)


setZOrderOnTop 옵션 대신에 다른 옵션으로 이를 해결할 수 있는지 알게 되면


최상단으로 올리지 않고도 투명 배경을 적용할 수 있을텐데.. 가능한 건지는 좀 더 봐봐야겠다.



< 참조 >


https://stackoverflow.com/questions/16762633/android-glsurfaceview-transparent-background-without-setzorderontop


https://stackoverflow.com/questions/13455363/make-a-surfaceview-transparent-without-setzorderontoptrue