我编写了一个重现该问题的示例应用程序:
https://github.com/blundell/VideoRatioProblemPerDevice
VideoView文档指出:
显示视频文件。... 负责从视频中计算其测量值,以便可以在任何布局管理器中使用,并提供各种显示选项,例如缩放
问题是三星 Galaxy S3 对视频做了奇怪的事情,不尊重视频的比例。(也发生在 HTC 设备上)。
全屏片段的活动:
我发现当视频在三星 Galaxy S3 上播放时,它会以不正确的比例播放。看起来它已经被拉伸到视图的高度,而不考虑原始视频的比例。
这里:
但是,如果我在三星 Galaxy Nexus 上播放视频,则视频的比例正确。
这里:
如果我强制视频占据片段的完整大小,它在 S3 上看起来没问题(因为屏幕的比例就是视频的比例)。但是我不想这样做,因为它搞砸了在其他地方使用的片段,即 tablet。
代码是:
带有带有 VideoView 的 Fragment 的 Activity。可以在这里看到:GITHUB CODE LINK
如果你想要一些代码在这里是hte VideoPlayerFragment:
public class VideoPlayerFragment extends Fragment {
private static final String TAG = "VideoPlayer";
private FitVideoView videoView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_video_player, container, false);
videoView = (FitVideoView) root.findViewById(R.id.surface);
return root;
}
public void playVideo() {
Uri uri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/" + R.raw.test_vid);
Log.d(TAG, "Uri is: " + uri);
setVideoLocation(uri);
if (!videoView.isPlaying()) {
videoView.start();
}
}
private void setVideoLocation(Uri uri) {
try {
videoView.setVideoURI(uri);
} catch (Exception e) {
Log.e(TAG, "VideoPlayer uri was invalid", e);
Toast.makeText(getActivity(), "Not found", Toast.LENGTH_SHORT).show();
}
}
public void pauseVideo() {
if (videoView.isPlaying()) {
videoView.pause();
}
}
}