Java 在android中的OpenGL视图上播放视频
我正在用cocos2d-x开发一个游戏,我想在里面玩视频。 该活动有一个OpenGL视图,我还将附加的VideoView放在上面,并将可见性设置为“不可见” 当我需要播放视频时,我只需隐藏OpenGL视图并启用视频视图。在这之后,我创建了MediaPlayer,并使用该视频视图的持有者调用setDisplay等,最终视频播放效果很好。当视频结束时,我再次切换可见性-opengl为可见,videoview为不可见 然而,问题是,当我尝试第二次播放视频时,它没有显示出来,然而,视频中的声音正在播放Java 在android中的OpenGL视图上播放视频,java,android,c++,cocos2d-x,Java,Android,C++,Cocos2d X,我正在用cocos2d-x开发一个游戏,我想在里面玩视频。 该活动有一个OpenGL视图,我还将附加的VideoView放在上面,并将可见性设置为“不可见” 当我需要播放视频时,我只需隐藏OpenGL视图并启用视频视图。在这之后,我创建了MediaPlayer,并使用该视频视图的持有者调用setDisplay等,最终视频播放效果很好。当视频结束时,我再次切换可见性-opengl为可见,videoview为不可见 然而,问题是,当我尝试第二次播放视频时,它没有显示出来,然而,视频中的声音正在播放
在使用android MediaPlayer类时,您需要一个surfaceview来播放视频
要在GLSurfaceView上播放视频,请创建一个包含surfaceView的android自定义对话框,并在该对话框上播放视频。您可以通过在glview表面上动态添加视频视图来完成此操作。首先创建父视图(任何布局)在同一父视图中添加视频视图,然后在gl曲面视图中添加此父视图。我以前做过这件事,它对我很有效。供参考:
// first set the content view as your glview with your params.
setContentView(mGLView, gl_params);
mGLView.setZOrderMediaOverlay(false);
// add a parent view for video view. rl is relative layout
addContentView(rl, rl_params);
// now add the video view inside this parent view.
rl.addview(video_view, video_view_params)
我只是修改了ApiDemo,看看它是否有效。我在这里有完整的代码:不使用单独的媒体播放器观看视频,我们可以设置视频和播放
mVideoView.setVideoURI(data.getData());
mVideoView.setVisibility(View.VISIBLE);
mVideoView.start();
//I could add touch listener in onCreate
mGLSurfaceView.setOnTouchListener(...);
//touch event will go all the way down to GLSurfaceView
//Here i could chnage the video view position
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mVideoView.setTranslationX(motionEvent.getX());
mVideoView.setTranslationY(motionEvent.getY());
return true;
}
因为这是在OpenGL视图的顶部创建一个视图,而它是不可见的,所以我可以通过它来触摸它吗?换句话说,该层是否允许触摸通过它传递到OpenGL层?我可以通过设置触摸监听器来监听运动事件,我也用这些更改更新了帖子