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

标签 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();
}

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

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

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

最佳答案

loadingVideo.setZOrderOnTop(true); 

before the

loadingVideo.start();

关于java - Android:以编程方式创建的VideoView显示黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46501489/

相关文章:

android - Facebook 登录对话框在加载后很快消失

Android,静音模式通知

java - Android 处理程序泄漏

javascript - 为什么 Canvas 上什么也没有出现?

java - @InjectMocks 在具有基元作为字段的类上

java - 从 EJB 拦截器中抛出异常

javascript - 如何通过鼠标悬停和鼠标移出来更改窗口状态?

java - 使用 System.out.write 打印到控制台

javascript - Android 浏览器在 "double swipe"滚动后停止渲染 Canvas

javascript - 定位重叠 Canvas