【Android开发学习39】VideoView在GLSurfaceView之上显示的解决方案

在项目中,有时候需要将视频显示在GLSurfaceView之上, 目前我的方法是:

 

解决方案一:

在GLSurfaceView.Renderer中,将onDrawFrame函数中画物体的操作全部屏蔽掉

在这里我使用一个变量bRendeFlag 来控制的。

@Override
public void onDrawFrame(GL10 gl) {
	// TODO Auto-generated method stub
	//System.out.println("MySurfaceView onDrawFrame ===");
	//采用平滑着色
	gl.glShadeModel(GL10.GL_SMOOTH);
	//设置为打开背面剪裁
	gl.glEnable(GL10.GL_CULL_FACE);            
	//清除颜色缓存于深度缓存
	gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
	//设置当前矩阵为模式矩阵
	gl.glMatrixMode(GL10.GL_MODELVIEW);
	//设置当前矩阵为单位矩阵
	gl.glLoadIdentity(); 
   
	// 在3D空间绘制等级图片
	gl.glMatrixMode(GL10.GL_MODELVIEW);
	
	gl.glLoadIdentity();
	//开启混合   
	gl.glEnable(GL10.GL_BLEND); 
	//设置源混合因子与目标混合因子
	gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);          

	
	if(bRendeFlag == true){
	   levelSurface.draw(gl);
	   singerSurface.draw(gl);
	}
	
   
	//禁止混合   
	gl.glDisable(GL10.GL_BLEND);
}


这种方法不是很现实,因为也许我们在播放视频的同时也想刷新界面的话。

 

解决方案二:

GLSurfaceView的渲染模式设置为: 非主动渲染(RENDERMODE_WHEN_DIRTY)

// 设置为主动渲染.
public void setRenderModeAuto(){
	setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}

// 设置为非主动渲染.
public void setRenderModeDirty(){
	setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}


这样3D层就不会主动去刷新,Video就能显示出来了。

 

 

解决方案三:

将VideoView置到Top层:

tVideoView.setZOrderOnTop(true);


 

第三个方案,我失败了,不过理论上应该是可行的,可能是我程序内部还有点小问题。

 

 

本文博客源地址:http://blog.csdn.net/ypist

 

 

 

 

 

你可能感兴趣的:(Android应用开发,OpenGL)