2012-02-06 4 views
5

Я разрабатываю игру с использованием cocos2d-x, и я хочу играть в нее видео. Активность имеет один вид OpenGL, и я также добавил дополнительный VideoView поверх него и установил видимость для INVIVIBLE.Воспроизведение видео поверх OpenGL-вида в android

Когда мне нужно играть в видео, я просто скрываю представление OpenGL и включаю свой видеофайл. После этого я создаю MediaPlayer, вызываю setDisplay с держателем этого VideoView и т. Д., И в конечном итоге видео играет хорошо. Когда видео заканчивается, я снова переключаю видимость - opengl to VISIBLE и videoview to INVISIBLE.

Однако проблема в том, что когда я пытаюсь воспроизвести видео во второй раз, он просто не появляется, однако звук от воспроизведения видео воспроизводится.

Есть ли улов с видимостью?

ответ

1

Для просмотра видеоролика при использовании класса Android MediaPlayer вам потребуется просмотр поверхности.

Чтобы воспроизвести видео выше GLSurfaceView, создайте пользовательский диалог android, который содержит изображение на поверхности и воспроизведение видео.

1

Вы можете сделать это, добавив динамически видеоизображение на поверхность glview. Сначала создайте родительский вид (любой макет), добавьте видео-представление в том же родительском представлении, затем добавьте это родительское представление на вид поверхности поверхности. Я делал это раньше, и это работало для меня. для вашей справки:

 // 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 View, в то время как он невидим я буду в состоянии коснуться «через» его? Другими словами, сможет ли этот слой пройти через него к слою OpenGL? –

+0

Я мог слушать событие движения, установив сенсорный прослушиватель, я также обновил сообщение с этими изменениями –

Смежные вопросы