Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中的OpenGL视图上播放视频_Java_Android_C++_Cocos2d X - Fatal编程技术网

Java 在android中的OpenGL视图上播放视频

Java 在android中的OpenGL视图上播放视频,java,android,c++,cocos2d-x,Java,Android,C++,Cocos2d X,我正在用cocos2d-x开发一个游戏,我想在里面玩视频。 该活动有一个OpenGL视图,我还将附加的VideoView放在上面,并将可见性设置为“不可见” 当我需要播放视频时,我只需隐藏OpenGL视图并启用视频视图。在这之后,我创建了MediaPlayer,并使用该视频视图的持有者调用setDisplay等,最终视频播放效果很好。当视频结束时,我再次切换可见性-opengl为可见,videoview为不可见 然而,问题是,当我尝试第二次播放视频时,它没有显示出来,然而,视频中的声音正在播放

我正在用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层?我可以通过设置触摸监听器来监听运动事件,我也用这些更改更新了帖子