将 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

以编程方式更改 MediaController 图标

DialogFragment 中实现的 videoview 的 MediaController 未正确更新

vitamio MediaController总是显示在底部的问题

VideoView - MediaController 未显示