Intereting Posts
Facebook SDK 4 для Android – как выйти из программы Рабочий многоточечный запрос POST с волейболом и без HttpEntity Как подчеркнуть текст кнопки в Android? Listview с пользовательским адаптером, содержащим CheckBoxes Ошибка GCM – googleCloudMessaging.register Привет, мировой модуль ядра для android и неизвестного переселения: 27, когда insmod Для Android SDK требуется Android Developer Toolkit версии 23.0.0 или выше Как изменить цвет текста элемента простого списка IntelliJ / структурный поиск: удаление бесполезных методов, которые вызывают только метод super Макеты Eclipse и Android XML дают «по умолчанию» не лучшее соответствие для любой комбинации устройств / локалей » Как реализовать главную и дочернюю страницу, например «Активность в Android»? Как сохранить изображения с камеры в Android в определенную папку? База Android обновляется каждый раз, когда запускается приложение Лучший способ загрузки изображения с url в Android Android-подход для «Оцените мое приложение»

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+).

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