Android VideoView 重叠

Posted

技术标签:

【中文标题】Android VideoView 重叠【英文标题】:Android VideoView Overlapping 【发布时间】:2016-01-31 18:10:14 【问题描述】:

我在 Xamarin 表单中有两个页面,使用自定义渲染器在每个页面上显示 android VideoView。 Page1 上的视频(嵌套在 RelativeLayout 内)成功播放。当我使用 Navigation.PushAsync(Page2); 从 Page1 导航到 Page2 时,Page1 中的 VideoView 继续与 Page2 上的视频重叠。

有没有办法强制 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>

【问题讨论】:

我已经尝试在 Xamarin Forms 页面中使用 OnAppearing() 和 OnDisapearing() 在导航到第二页时将播放器的可见性设置为 false,但没有成功。 VideoView.setZOrderMediaOverlay(true) VideoView.setTranslationZ() VideoView.setZOrderOnTop() 方法也不能解决问题。 根据我对 SurfaceView 的发现,听起来像是在可见性恢复时销毁并创建它是可行的方法,但不确定那会是什么样子。 【参考方案1】:

VideoViewSurfaceViewSurfaceViews Z 顺序在附加到窗口之前确定,之后无法更改。所以你不能同时显示多个SurfaceViews,因为SurfaceView 可以显示任何事物。

您可能需要尝试完全删除 VideoView 并稍后重新添加,或者,如果所有其他方法都失败,您可以尝试将 VideoView 移出屏幕。

Source

【讨论】:

有趣的想法。我尝试将其包装在 Xamarin Forms 框架中,然后在 OnDisappear() 中将其删除。除了第 2 页上的内容之外,第 1 页上的所有其他元素仍然显示,这是可行的。当它尝试在单个活动中分层新屏幕时,表单导航不能像相对布局。

以上是关于Android VideoView 重叠的主要内容,如果未能解决你的问题,请参考以下文章

Android videoview can't play this video on android 4.3 错误

如何在 Android Studio 中将一个 VideoView 放在另一个 VideoView 下方?

Android VideoView未解决,动态读取权限BottomNavigationView的用法

Android VideoView未解决,动态读取权限BottomNavigationView的用法

Android Videoview - 去除两侧的黑色空间

Android:无法使用 videoview 播放视频