2012-02-06 67 views
5

我正在开发一款使用cocos2d-x的游戏,并且我想在其中播放视频。 该活动有一个OpenGL视图,并且我还将其他VideoView放在其上并为INVISIBLE设置了可见性。在Android的OpenGL视图上播放视频

当我需要播放视频时,我只隐藏OpenGL视图并启用我的VideoView。之后,我创建MediaPlayer,使用该VideoView的持有者调用setDisplay等,最终视频播放效果良好。当视频结束时,我再次切换可见性 - opengl到VISIBLE和videoview到INVISIBLE。

但是,问题是,当我第二次尝试播放视频时,它只是不显示,但是正在播放来自视频的声音。

是否有任何可见性?

回答

1

您将需要使用android MediaPlayer类播放视频的表面视图。

要在GLSurfaceView上播放视频,请创建一个包含surfaceView并播放视频的android自定义对话框。

1

你可以通过在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) 
3

我刚刚修改了ApiDemo以查看它是否有效。我这里有博客全码:post,而无需使用单独的媒体播放器的视频视图,我们可以设置视频和播放

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; 
} 
+0

因为这是建立在OpenGL的视图的顶视图,而它是无形的,我会是能够通过'触摸'它?换句话说,这个层允许触摸传递给OpenGL层吗? – 2012-06-27 14:42:25

+0

我可以通过设置触摸侦听器来侦听动作事件,我也更新了这些更改的帖子 – 2012-06-28 03:26:33