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】:VideoView
是 SurfaceView
和 SurfaceView
s Z 顺序在附加到窗口之前确定,之后无法更改。所以你不能同时显示多个SurfaceView
s,因为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的用法