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

Android: Programmatically created VideoView is showing black screen

所以我有一个 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();
}

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

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

我不明白为什么它没有绘图或我做错了什么。

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

loadingVideo.setZOrderOnTop(true); 

before the

loadingVideo.start();