GLSurfaceView本身是不透明的,在相機預覽圖像上添加水印有時會採用在surface view上附加一層GLSufaceView繪製各種各樣的水印圖片,這時需要透明背景的GLSurfaceView並放置在上層顯示,可以通過如下方式實現:
class MyGLSurfaceView(context: Context, attributes: AttributeSet?) : GLSurfaceView(context, attributes) {
constructor(context: Context) : this(context, null)
private val renderer: MyGLRenderer
init {
// Create an OpenGL ES 2.0 context
setEGLContextClientVersion(2)
setTranslucent()
renderer = MyGLRenderer()
// Set the Renderer for drawing on the GLSurfaceView
setRenderer(renderer)
// Render the view only when there is a change in the drawing data
renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY
}
/**
* 設置透明背景的方法
* 這個方法需要在setRenderer之前調用纔有效
*/
private fun setTranslucent(){
setEGLConfigChooser(8, 8, 8, 8, 16, 0)
holder.setFormat(PixelFormat.TRANSLUCENT)
// 將GLSurfaceView置頂
setZOrderOnTop(true)
}
}