Intereting Posts
Есть ли простой способ перетаскивать элементы в ListView, чтобы изменить их порядок? SwipeRefreshLayout в API 21 Возможна загрузка во внутреннюю память? Навигационный ящик выделяет выбранный элемент не работает Можно ли использовать MapView с FragmentManager и ListFragment Центрировать поля LinearLayout и «процент» Ошибка манифеста слияния Потребление батареи, когда TCP открыто для ADB через Wi-Fi, может подключаться Разработка приложения для Android как для игры Google, так и для магазина Amazon Store Как запретить Chrome (или телефонные интернет-браузеры вообще) на устройстве Android заменить нестандартные символы Unicode для Emojis? Обнаружение целевого приложения при отправке намерения Что такое CalendarContract.EventsColumns.CUSTOM_APP_URI? Развертывание приложения для Android Ошибка: О, о! ENOENT, нет такого файла или каталога '<meteor-app> /. Meteor / local / cordova-build / platform / android / local.properties' Ошибка PhoneGap / Cordova при добавлении платформы 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 будет «мигать», но он работает. Все еще не знаю, почему

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

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

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