2017-09-30 5 views
1

J'ai VideoView que j'ai fait complètement programme comme ceci:Android: Programmatically créé VideoView montre écran noir

loadingVideo = new VideoView(getContext()); 
String videoPath = "android.resource://" + splashActivity.getPackageName() + "/" + R.raw.loading_video; 
loadingVideo.setVideoURI(Uri.parse(videoPath)); 
loadingVideo.setLayoutParams(new FrameLayout.LayoutParams(Constants.PIXEL_WIDTH, Constants.PIXEL_HEIGHT)); 
loadingVideo.setTranslationX(0); 
loadingVideo.setTranslationY(0); 
loadingVideo.start(); 
this.widgetContainer.addView(loadingVideo); 

Je sais que la vidéo est en train de faire quelque chose parce que j'ai plus tard, un OnCompletionListener qui ne se déclenche , le problème est que je ne vois jamais rien et que j'ai juste un écran noir. Je dessine la méthode ici:

if(loadingVideo.isPlaying()) { 
    loadingVideo.draw(canvas); 
    System.out.println(); 
} 

et la méthode draw(Canvas canvas) est actualisée à un taux de 60fps en utilisant ceci:

Canvas canvas = null; 
SurfaceHolder sh = getHolder(); 
boolean unlocked = false; 
try { 
    if(sh.getSurface().isValid()) { 
     canvas = sh.lockCanvas(); 
     synchronized(sh) { 
      draw(canvas); 
     } 
    } 
} catch(Exception e) { 
    if(canvas != null && sh.getSurface().isValid()) { 
     sh.unlockCanvasAndPost(canvas); 
     unlocked = true; 
    } 
    e.printStackTrace(); 
} finally { 
    if(!unlocked && canvas != null && sh.getSurface().isValid()) { 
     sh.unlockCanvasAndPost(canvas); 
    } 
} 

Je ne comprends pas pourquoi il ne tire pas ou ce que je suis mal faire. Note de côté: Je sais que la façon dont je fais cela semble étrange mais je sais que cela fonctionne parce que j'ai créé d'autres vues de cette façon dans d'autres projets et qu'ils ont bien fonctionné. Je ne peux pas obtenir la vidéo pour montrer autre chose qu'un écran noir.

+0

videoView.setZOrderOnTop (true); // cette ligne résoudre le problème –

Répondre

0
loadingVideo.setZOrderOnTop(true); 

avant la

loadingVideo.start();