Android VideoView перекрывается

У меня есть две страницы в Xamarin Forms, использующие настраиваемый модуль визуализации для отображения Android VideoView на каждой странице. Видео на странице 1 (вложенное в RelativeLayout) воспроизводится успешно. Когда я перехожу со страницы 1 на страницу 2 с помощью Navigation.PushAsync(Page2);, VideoView со страницы 1 продолжает перекрывать видео на странице 2.

Есть ли способ заставить VideoView учитывать видимость своего родительского контейнера представления?

Page1.xaml:

<?xml version="1.0" encoding="utf-8" ?>
        <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                     x:Class="MyVideoApp.Page1">
        <RelativeLayout>
            <MyVideoView x:Name="vidPlayer" Source="http://...."
                  RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
                  RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height}" />
          </RelativeLayout>
        </ContentPage>

Page2.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyVideoApp.Page2">

    <MyVideoView x:Name="vidPlayer" Source="http://...." />

</ContentPage>

person Adam    schedule 31.01.2016    source источник
comment
Я уже пытался использовать OnAppearing() и OnDisapearing() на странице Xamarin Forms, чтобы установить для видимости игрока значение false при переходе на вторую страницу, но безуспешно. Методы VideoView.setZOrderMediaOverlay(true) VideoView.setTranslationZ() VideoView.setZOrderOnTop() также не решают проблему.   -  person Adam    schedule 31.01.2016
comment
Основываясь на том, что я нашел о SurfaceView, похоже, что его уничтожение и создание, когда видимость вернется, было бы правильным путем, но не уверен, как это будет выглядеть полностью.   -  person Adam    schedule 31.01.2016


Ответы (1)


VideoView - это SurfaceView и SurfaceViews Z-порядок определяется до присоединения к окну и не может быть изменен впоследствии. Таким образом, у вас не может быть одновременного показа нескольких SurfaceView, так как вид SurfaceView показывает все и вся.

Возможно, вам придется попробовать полностью удалить VideoView и снова добавить его позже, или, если ничего не помогает, вы можете попробовать убрать VideoView с экрана.

Источник

person hvaughan3    schedule 01.02.2016
comment
Интересная мысль. Я попытался обернуть его во фрейм Xamarin Forms, а затем удалить в OnDisappear(). Это работает, за исключением того, что все остальные элементы на странице 1 по-прежнему отображаются в дополнение к материалам на странице 2. Навигация по формам не должна нравиться относительным макетам, когда она пытается наслаивать новые экраны в рамках одного действия. - person Adam; 05.02.2016