Android прозрачный WebView поверх VideoView

У меня есть проект Ionic, в котором я хочу отобразить видео, а кроме того – содержимое кордовы 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 ), и вуаля элементы в WebView теперь появляются поверх Видео при воспроизведении. Это не идеально, поскольку иногда контент WebView будет «мигать», но он работает. Все еще не знаю, почему

Solutions Collecting From Web of "Android прозрачный WebView поверх VideoView"

Замените код ниже.

 webView.setBackgroundColor(Color.TRANSPARENT); 

Если вы хотите добавить веб-просмотр поверх видеоизображения, используйте макет содержимого приложения и добавьте в него веб-просмотр, как показано ниже.

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

Попробуй это :

 webView.setBackgroundColor(Color.TRANSPARENT); webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); OR webView.setBackgroundColor(0); webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 

При добавлении этого кода в WebViewer после загрузки URL-адреса он работает (API 11+).

Это даже работает, когда ускорение на жестком диске включено