1

我正在实现一个带有广告的视频播放器。最终,在广告播放恢复后,播放暂停并显示一些广告。

为了实现这一点,我用一个 VideoView 和另一个 View 完成了 FrameLayout 来显示广告。

当广告中断时,我会:

videoView.pause();
videoView.setVisibility(View.GONE);
adsView.setVisibility(View.VISIBLE):
//Play ads for X time
adsView.setVisibility(View.GONE);
videoView.setVisibility(View.VISIBLE);
videoView.play();

它相当简单,在我尝试过的所有设备上都可以正常工作,除了 Nexus 7。在 Nexus 7 上,当恢复播放时,视频会变小并且不会填满整个屏幕。它只使用大约 1/4 的屏幕。

经过数小时的调查后,我意识到只有在更改 VideoView 的可见性时才会发生这种情况。如果我评论以下行//videoView.setVisibility(View.GONE);,问题就会消失,但我看不到广告。

一些可能相关的日志:

NvOsDebugPrintf   BeginSequence 640x368
NvOsDebugPrintf   pnvsi->nDecodeBuffers = 9 
NvOsDebugPrintf   Display Resolution : (640x360) 
NvOsDebugPrintf   Display Aspect Ratio : (128x360) 

显示纵横比 (128x360) 应与显示分辨率 (640x360) 相同,但事实并非如此。

任何的想法?谢谢

4

1 回答 1

0

不确定原因,但似乎存在测量错误(我认为还有其他关于 n7 测量问题的报告)。View.GONE 导致视图被重新排列以考虑现在从消失视图中释放出来的空间。

作为一种解决方法,您可以避免被重排——尝试将两个视图都放在一个 RelativeLayout 中,并通过将宽度和高度上的 fill_parent 设置为两者来使它们完全重叠。然后您可以使用setVisibility(View.INVISIBLE)不会导致小部件调整大小的。

于 2012-12-19T16:19:53.467 回答