Android:以编程方式创建的VideoView显示黑屏

时间:2017-09-30 09:35:01

标签: java android canvas android-videoview

所以我有一个VideoView,我完全以编程方式完成了这样的工作:

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);

我知道视频正在做某事,因为我后来有OnCompletionListener确实发生了问题,问题是我实际上什么都没看到,只是得到黑屏。我在这里画出方法:

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

并使用以下方法以60fps的速率刷新draw(Canvas canvas)方法:

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);
    }
}

我不明白为什么它没有画画或者我做错了什么。

旁注:我知道我这样做的方式似乎很奇怪,但我知道它有效,因为我已经在其他项目中以这种方式创建了其他视图并且它们运行良好。我只是不能让视频显示黑屏以外的任何内容。

1 个答案:

答案 0 :(得分:0)

loadingVideo.setZOrderOnTop(true); 
  

之前的

loadingVideo.start();