将 MediaController 定位在 VideoView 上
Posted
技术标签:
【中文标题】将 MediaController 定位在 VideoView 上【英文标题】:Positioning the MediaController over the VideoView 【发布时间】:2012-05-08 15:20:00 【问题描述】:我在尝试将 MediaController 放置在我想要的位置时遇到了很多麻烦。
我真正想做的是始终在 VideoView 上方显示 MediaController,与底部对齐。
过去三天我一直在尝试这样做,但没有成功。我尝试获取 MediaController 的高度,但它始终为零,直到它第一次显示在屏幕底部。
我已经覆盖了 MediaController 来覆盖 setAnchorView,这样 VideoView 就不会覆盖它。
我已经阅读了 VideoView 和 MediaController 的源代码,并且我还尝试使用私有字段上的反射来获取 MediaController 的高度,但在组件第一次显示之前也没有成功。
如何知道 MediaController 的高度而不显示给用户?
【问题讨论】:
视频底部的控件是默认行为,不是吗?你可以分享一些代码,因为我认为你正在尝试做一些你不应该做的事情吗?您无法在不显示控件的情况下对其进行测量,因为它们不是任何视图层次结构的一部分(实际上,任何视图也是如此)。 我放弃了我想做的事情,因为在 MediaController 显示之前无法知道它的高度。我将转向 YouTube 方法,在这种方法中您没有 MediaController,仅显示 ProgressBar 并在触摸事件时播放/暂停。 【参考方案1】:将您的视频视图放入FrameLayout
并将其高度设置为wrap_content
,以便父级调整大小为子级(视频视图)高度。这一步至关重要,因为MediaController
视图默认添加到视频视图父级的底部(如果锚定到视频视图)。因此,父母的身高必须与孩子的身高相匹配,以使媒体控制器在视频视图的底部可见。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<VideoView
android:id="@+id/video_view"
android:layout_
android:layout_ />
</FrameLayout>
然后在您的活动类中,使用以下代码添加媒体控制器:
MediaController mediaController = new MediaController(VideoPlayerActivity.this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
【讨论】:
以上是关于将 MediaController 定位在 VideoView 上的主要内容,如果未能解决你的问题,请参考以下文章
MediaController 的默认 SeekBar 不同步
(Context, Token) 在实例化 MediaController
DialogFragment 中实现的 videoview 的 MediaController 未正确更新