1,首先,理解VideoView类中onMeasure函数对于屏幕的处理。即以下这段代码的含义。
if (mVideoWidth > 0 && mVideoHeight > 0) {
if ( mVideoWidth * height > width * mVideoHeight ) {
//Log.i("@@@", "image too tall, correcting");
height = width * mVideoHeight / mVideoWidth;
} else if ( mVideoWidth * height < width * mVideoHeight ) {
//Log.i("@@@", "image too wide, correcting");
width = height * mVideoWidth / mVideoHeight;
} else {
//Log.i("@@@", "aspect ratio is correct: " +
//width+"/"+height+"="+
//mVideoWidth+"/"+mVideoHeight);
}
}
这里,width,height为最终需要设置的视频的宽和高。
mVideoWidth,mVideoHeight为底层传上来的实际的视频的宽和高。
这段代码的含义解释如下:
1,在播放的视频的高度和宽度都小于手机屏幕的高度和宽度时;
(1)视频在竖屏播放时,这时手机的宽度小于高度
(a)mVideoWidth/ width > mVideoHeight/ height
这时,视频放大后,视频的宽度(mVideoWidth)先达到设备的宽度,全屏后,视频的宽度要用设备屏幕的宽度,高度要进行缩放。这时应该按照视频宽度的缩放比例对视频的高进行缩放,即缩放后的视频宽度选用手机屏幕的宽度,视频的高度要乘以mVideoWidth/ width。即为height = width * mVideoHeight / mVideoWidth;
(b)mVideoWidth/ width < mVideoHeight/ height
这时视频要按比例放大时,即视频的高度和宽度同乘以一个常数的话,高度先达到设备的高度。因此,全屏后,视频的高度要用手机的高度,视频的宽度要进行相应的缩放,且缩放比例为视频的高度的缩放比例。即width = height * mVideoWidth / mVideoHeight;
(2)视频在横屏播放时,这时手机的宽度大于高度
这时,全屏时,视频的宽高变化同横屏。
if (mVideoWidth > 0 && mVideoHeight > 0) {
if ( mVideoWidth * height > width * mVideoHeight ) {
//Log.i("@@@", "image too tall, correcting");
height = width * mVideoHeight / mVideoWidth;
} else if ( mVideoWidth * height < width * mVideoHeight ) {
//Log.i("@@@", "image too wide, correcting");
width = height * mVideoWidth / mVideoHeight;
} else {
//Log.i("@@@", "aspect ratio is correct: " +
//width+"/"+height+"="+
//mVideoWidth+"/"+mVideoHeight);
}
}
这里,width,height为最终需要设置的视频的宽和高。
mVideoWidth,mVideoHeight为底层传上来的实际的视频的宽和高。
这段代码的含义解释如下:
1,在播放的视频的高度和宽度都小于手机屏幕的高度和宽度时;
(1)视频在竖屏播放时,这时手机的宽度小于高度
(a)mVideoWidth/ width > mVideoHeight/ height
这时,视频放大后,视频的宽度(mVideoWidth)先达到设备的宽度,全屏后,视频的宽度要用设备屏幕的宽度,高度要进行缩放。这时应该按照视频宽度的缩放比例对视频的高进行缩放,即缩放后的视频宽度选用手机屏幕的宽度,视频的高度要乘以mVideoWidth/ width。即为height = width * mVideoHeight / mVideoWidth;
(b)mVideoWidth/ width < mVideoHeight/ height
这时视频要按比例放大时,即视频的高度和宽度同乘以一个常数的话,高度先达到设备的高度。因此,全屏后,视频的高度要用手机的高度,视频的宽度要进行相应的缩放,且缩放比例为视频的高度的缩放比例。即width = height * mVideoWidth / mVideoHeight;
(2)视频在横屏播放时,这时手机的宽度大于高度
这时,全屏时,视频的宽高变化同横屏。