在项目中,有时候需要将视频显示在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

更多相关文章

  1. Android 3.2 以上转屏,切换屏幕,横竖屏(onConfigurationChanged)会
  2. 王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V
  3. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案
  4. javascript(六)js事件绑定浏览器兼容解决方案 attachEvent addEve
  5. java中多线程安全问题产生&解决方案——同步方法

随机推荐

  1. PlayFramework完整实现一个APP(九)
  2. PlayFramework完整实现一个APP(一)
  3. xml编程(一)-xml语法
  4. Java套接字编程(下)(1)
  5. xml文件介绍及使用
  6. XML的术语
  7. 第2章 包装类
  8. XML轻松学习总节篇
  9. Java对象的强、软、弱和虚引用
  10. XML轻松学习手册(2)XML概念