调整surfaceView播放视频时的显示比例
2015-03-05 10:38
1161 查看
最近因为自己感兴趣就开始做个视频播放器。使用了全屏状态下的SurfaceView来播放视频,但是播放时却发现有些视频可以很好的播放,有些却被拉伸了,视频看起来是被“压扁”了的感觉。看到网上有重写一个SurfaceView的例子,感觉那是一种方法,但是我对这个问题有自己的理解:问题产生的原因就是SurfaceView的长宽比和视频本身的长宽比不相等,所以根据视频的长宽比调整一下SurfaceView的长宽比不就可以了吗?所以有了如下的方法:
首先,我们来获取一下手机屏幕的长宽,因为全屏状态下,视频的高度就是手机的宽度,我们所要做的就是在这个视频高度的基础上将SurfaceView的宽度给缩小一点:
点击(此处)折叠或打开
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mSurfaceViewWidth = dm.widthPixels;
mSurfaceViewHeight = dm.heightPixels;
因为在布局文件里,对SurfaceView的长宽都是match_parent的,所要一开始SurfaceView的大小和手机屏幕是相等的。下面来重写一下onVideoSizeChanged的方法就可以了。
在这里我们根据视频的大小和屏幕的宽度来计算出SurfaceView应该在左右空出多少来就可以了:
点击(此处)折叠或打开
@Override
public void onVideoSizeChanged(MediaPlayer
mp, int width, int height) {
if (width == 0 || height == 0) {
Log.e(TAG, "invalid
video width(" + width + ")
or height(" + height
+ ")");
return;
}
Logger.d(TAG, "onVideoSizeChanged
width:" + width + "
height:" + height);
mIsVideoSizeKnown = true;
mVideoHeight = height;
mVideoWidth = width;
int w = mSurfaceViewHeight * width / height;
int margin = (mSurfaceViewWidth - w) / 2;
Logger.d(TAG, "margin:" + margin);
RelativeLayout.LayoutParams
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
lp.setMargins(margin, 0, margin, 0);
mSurfaceView.setLayoutParams(lp);
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
首先,我们来获取一下手机屏幕的长宽,因为全屏状态下,视频的高度就是手机的宽度,我们所要做的就是在这个视频高度的基础上将SurfaceView的宽度给缩小一点:
点击(此处)折叠或打开
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mSurfaceViewWidth = dm.widthPixels;
mSurfaceViewHeight = dm.heightPixels;
因为在布局文件里,对SurfaceView的长宽都是match_parent的,所要一开始SurfaceView的大小和手机屏幕是相等的。下面来重写一下onVideoSizeChanged的方法就可以了。
在这里我们根据视频的大小和屏幕的宽度来计算出SurfaceView应该在左右空出多少来就可以了:
点击(此处)折叠或打开
@Override
public void onVideoSizeChanged(MediaPlayer
mp, int width, int height) {
if (width == 0 || height == 0) {
Log.e(TAG, "invalid
video width(" + width + ")
or height(" + height
+ ")");
return;
}
Logger.d(TAG, "onVideoSizeChanged
width:" + width + "
height:" + height);
mIsVideoSizeKnown = true;
mVideoHeight = height;
mVideoWidth = width;
int w = mSurfaceViewHeight * width / height;
int margin = (mSurfaceViewWidth - w) / 2;
Logger.d(TAG, "margin:" + margin);
RelativeLayout.LayoutParams
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
lp.setMargins(margin, 0, margin, 0);
mSurfaceView.setLayoutParams(lp);
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
}
}
相关文章推荐
- 使用SurfaceView播放视频,调节进度,滑动屏幕调节音量并显示音量。
- 使用SurfaceView播放视频,调节进度,滑动屏幕调节音量并显示音量。
- Android使用SurfaceView播放视频时横竖屏的调整
- android SurfaceView中播放视频 按视频的原始比例播放
- Android使用SurfaceView播放视频时横竖屏的调整
- 视频播放surfaceView camera,获取预览图像显示setPreviewCallback()
- Android SurfaceView播放视频时横竖屏的调整
- MediaPlayer 播放视频文件并通过SurfaceView显示
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用mediaplayer + surfaceview来播放视频
- Android之SurfaceView实现视频播放
- 继承SurfaceView实现视频播放
- Android使用SurfaceView实现视频播放
- Android之SurfaceView实现视频播放
- surfaceView视频播放
- MediaPlayer使用SurfaceView播放视频的时它们的主要配置
- SurfaceView实现视频播放
- 用VideoView和SurfaceView播放视频
- 用VideoView和SurfaceView播放视频