VideoView上的android透明WebView

我有一个Ionic项目,我想要显示一个video,并在其上面显示cordova WebView的内容。 要在video视图的顶部放置透明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上测试了它,并且在播放video时看不到WebView 。 但是如果我使用Chrome来检查它并hover (例如屏幕显示覆盖蓝色),那么html内容中的元素就会出现。 此外,如果我触摸屏幕,则内容突然出现。 因此,当没有与WebView进行交互时,它似乎是一个渲染问题,但是一旦接到触摸或某种触发,它就会出现。

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

此外,我在config.xml设置了 ,但这并没有改变行为。

编辑1:我添加了一个带有透明文本的div,并在其上放置了一个简单的无限animation(只是将不透明度从.9更改为1 ),并且WebView的元素现在显示在顶部播放时的video。 它并不完美,因为有时WebView内容会“闪烁”,但它确实有效。 尽管如此,仍然不知道为什么

用下面的代码替换。

 webView.setBackgroundColor(Color.TRANSPARENT); 

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

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