VideoView

时间:2017-03-14 03:44:31

标签: android webview android-videoview transparent

我有一个Ionic项目,我希望在其中显示视频,并在其上面显示cordova WebView的内容。要在视频视图顶部显示透明WebView,请在我使用的插件中使用:

webView.getView().setBackgroundColor(0x00000000);
((ViewGroup) webView.getView()).bringToFront();

VideoView已初始化并添加到FrameLayout中,如下所示:

FrameLayout containerView = (FrameLayout) cordova.getActivity().findViewById(1);

if (containerView == null) {
  containerView = new FrameLayout(cordova.getActivity().getApplicationContext());
  containerView.setId(1);
  containerView.setBackgroundColor(Color.BLACK);

  FrameLayout.LayoutParams containerLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
  cordova.getActivity().addContentView(containerView, containerLayoutParams);

  videoView = new VideoView(cordova.getActivity());
  videoView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
  containerView.addView(videoView);

  MediaPlayer player = new MediaPlayer();
  player.setOnPreparedListener(this);
  player.setOnCompletionListener(this);
  player.setOnErrorListener(this);

  final SurfaceHolder holder = videoView.getHolder();
  holder.setKeepScreenOn(true);
  holder.addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
      player.setDisplay(holder);
      try {
        player.prepare();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
      player.release();
    }
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
  });
}

我在Android 4.4.2上测试了它,效果很好。我已经在Android 5.1.1上对其进行了测试,并且在播放视频时WebView不可见。但是,如果我使用Chrome检查它并将鼠标悬停在<body>上(然后屏幕显示覆盖蓝色),则会显示html内容中的元素。此外,如果我触摸屏幕,则内容突然出现。因此,当与WebView没有交互时,它似乎是一个渲染问题,但是一旦接到触摸或某种触发,它就会出现。

我也尝试过使用Crosswalk,它在4.2.2上仍能完美运行,但只适用于在5.1.1上启动应用程序,然后在第一次交互后它才能在触摸屏幕时起作用

我也在<preference name="BackgroundColor" value="0xff000000"/>设置了config.xml,但这并没有改变行为。

编辑1: 我在其中添加了一个带有透明文字的div,并在其上添加了一个简单的无限动画(只是将不透明度从.9更改为1),并且在{ {1}}现在播放时会出现在视频的顶部。它并不完美,因为WebView内容有时会闪烁&#34;但它确实有效。虽然

仍然不知道为什么

1 个答案:

答案 0 :(得分:-1)

用下面的代码替换。

webView.setBackgroundColor(Color.TRANSPARENT);  

如果您想在视频视图的顶部添加webview, 使用应用程序内容布局并在其中添加webview,如下所示。

FramlayoutLayout layout = (FramlayoutLayout )cordova.getActivity() findViewById(android.R.id.content);
layout.addview(your webview)