旋转回肖像时,避免Android VideoView损坏

时间:2011-06-29 17:14:35

标签: android corruption android-videoview screen-rotation

我设法编写了一个能够从互联网上查看.3gp文件的有限视频播放器。视频将以全屏显示,保持视频宽高比。此外,旋转不会中断视频,从而可以毫无问题地继续播放。

一切看起来都不错,但是......当你旋转回到肖像时,我的HTC图例中,视频已损坏,而不是显示全屏,它以原始像素大小显示。但再次旋转到景观作品,并完美展现。有什么想法吗?不幸的是,我没有更多的硬件来测试它,我已经没有想法进行测试了。

您可以从https://github.com/gradha/Android-video-stream-rotation获取完整的示例源代码。以下是我打开应用程序,旋转到横向,触摸屏幕以显示视频控件,然后旋转回到肖像以查看损坏的屏幕截图。 video started ok in portrait

on landscape the video works fine too

but now going back to portrait always shows corruption

2 个答案:

答案 0 :(得分:4)

https://github.com/gradha/Android-video-stream-rotation的源代码中。你添加了评论:

  

因为我们在中指定了   AndroidManifest.xml 我们想要处理我们自己的方向   更改,我们调整屏幕的大小是肖像或   景观。

从源代码AndroidManifest.xml

android:configChanges="orientation|screenSize"

因此,如果您将此属性添加到清单中的activity元素,我会解释为该活动将处理所有方向更改?不是吗?

来自Android开发者

  

要声明活动处理配置更改,请编辑   清单文件中的相应活动元素包含   android:configChanges属性... more

所以你应该需要:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

我创建了一个测试项目来检查是否是这种情况:

旋转视频流示例:https://github.com/TouchBoarder/RotatingVideoStream

我的结论: 我不需要在活动中覆盖“onConfigurationChanged”以在纵向和横向上显示正确的视频,并且视频会继续播放旋转变化。

随意改进和使用代码:)

答案 1 :(得分:0)

原来我的整个测试用例都错了。直到the commit where I blame the easy videoview example on being wrong根据书中的所有内容。但是我忘记了android:configChanges="orientation"行,并且在前面提到的提交之上添加这一行会使一切正常运行而不会出现视频损坏。

我将hsigmond的答案标记为有效提供我可以比较的测试示例并找出真正的问题。我使用自定义方向处理程序和VideoView的子类来解决这个问题是错误的,错误地基于问题Android VideoView orientation change with buffered video。不是 错误,我只是错误地应用它(加上其他答案也提到了缺失的android:configChanges)。