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