每个人。我有一个项目,我需要在 VideoView 中以纵向显示视频,但过去几周我遇到了一个奇怪的问题。另请注意,此问题仅在 VideoView 首次加载数据时发生。
这是布局的一个非常精简的版本:
<RelativeLayout>
<RelativeLayout>
<VideoView /> <-- W:fill_parent, H:wrap_content
</RelativeLayout>
</RelativeLayout>
现在解决实际问题:当 VideoView 首次加载数据时,它的高度/宽度都填充整个屏幕(减去填充空间)不到一秒(最多 3 秒,取决于它是本地还是流媒体),然后它会神奇地将自己调整到预期的大小。
由于未存储在本地的视频需要更长的时间,我觉得问题似乎与 VideoView 需要时间来加载视频有关,并且没有立即正确调整其边界,这就是为什么它会扩展以填满屏幕,然后突然下降降到合适的大小。
现在,我相信它每次都没有这样做的原因是因为它每次加载时仍然使用相同的 VideoView 实例(因为它使用的是 ViewFlipper 而不是 setContentView,所以它没有创建它的新实例)。
但是,我以同样的方式将数据加载到 VideoView 中,我不明白为什么问题不会持续存在,这让我认为我对它为什么这样做的假设是错误的。
现在我尝试过:
我开始为 RelativeLayout 和 VideoView 设置宽度为 fill_parent 和高度为 wrap_content,这是我最初注意到这个问题的地方。另请注意:Eclipse 中的图形布局显示了与我试图解决的这些设置相同的问题:VideoView 被扩展以填充屏幕,减去它具有的填充)。
我尝试将布局强制为 XML 布局中的特定像素尺寸(我知道这很糟糕),然后为视图定义新的 LayoutParams 并在视频正确加载后设置它们。
我尝试动态创建一个新的 VideoView 并在加载后将其添加到布局中;仍然没有运气。
现在我没有想法了......其他人有吗?
并提前感谢您的帮助~
编辑:
同时,作为一种解决方法,我为 VideoView 创建了一个 onPreparedListener(),并保持视图隐藏,直到 onPreparedListener 被触发。这似乎解决了这个问题,但我更好奇为什么 VideoView 正在做它正在做的事情,而不一定只是如何解决它。
再次感谢~