Android 如何更改默认 VideoView / MediaPlayer 全屏?
Posted
技术标签:
【中文标题】Android 如何更改默认 VideoView / MediaPlayer 全屏?【英文标题】:Android How to change default VideoView / MediaPlayer full screen? 【发布时间】:2011-10-20 14:34:06 【问题描述】:我目前正在 VideoView 中播放一个视频(.mp4 文件,在两个安卓平板电脑上都可以正常工作)。首先我使用了 VideoView,但设备 (EKEN M003S) 全屏播放视频,而不是在我将宽度和高度都设置为 272 x 153 dp 的 VideoView 内。所以我尝试做一个VideoView的扩展类来覆盖onMeasure()和changeVideoSize()。像这样:
public class EkenVideoView extends VideoView
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
//Log.i("@@@@", "onMeasure");
int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
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);
if (screenMode == DisplayMode.ORIGINAL)
if (mVideoWidth > 0 && mVideoHeight > 0)
if ( mVideoWidth * height > width * mVideoHeight )
// video height exceeds screen, shrink it
height = width * mVideoHeight / mVideoWidth;
else if ( mVideoWidth * height < width * mVideoHeight )
// video width exceeds screen, shrink it
width = height * mVideoWidth / mVideoHeight;
else
// aspect ratio is correct
else if (screenMode == DisplayMode.FULL_SCREEN)
// just use the default screen width and screen height
else if (screenMode == DisplayMode.ZOOM)
// zoom video
if (mVideoWidth > 0 && mVideoHeight > 0 && mVideoWidth < width)
height = mVideoHeight * width / mVideoWidth;
//Log.i("@@@@@@@@@@", "setting size: " + width + 'x' + height);
setMeasuredDimension(272, 153);
public void changeVideoSize(int width, int height)
mVideoWidth = width;
mVideoHeight = height;
// not sure whether it is useful or not but safe to do so
getHolder().setFixedSize(272, 153);
requestLayout();
invalidate(); // very important, so that onMeasure will be triggered
我输入了宽度 272 和高度 153 以强制 .mp4 视频的宽度和高度为该大小,但 EKEN M003S 继续以全屏模式播放视频。因此,当我运行应用程序时,一切正常,视频在所有其他视图下方的图层上全屏播放,使 Activity 与下方的视频保持半透明。
除了 EKEN M003S,我敢肯定有些设备还具有默认强制全屏播放视频的功能,并且还有一种方法可以覆盖该默认设置。如果有办法,请教我怎么做。谢谢。
【问题讨论】:
“我确信某些设备还具有强制视频在默认情况下全屏播放的功能”——没有合法的 android 电子市场。这不会通过市场的兼容性测试。因此,如果您确定您的分析是正确的,则需要联系制造商并询问他们如何解决他们不兼容的 Android 分支。 【参考方案1】:http://clseto.mysinablog.com/index.php?op=ViewArticle&articleId=2992625
我已经在 Asus TF 101 (1280x800 res) 上测试了此代码,并且视频以 640x480 分辨率运行。尝试在您的 XML 文件和 changeVideoSize() 方法中设置尺寸,尝试设置 screenMode = DisplayMode.ORIGINAL
【讨论】:
以上是关于Android 如何更改默认 VideoView / MediaPlayer 全屏?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin - 如何设置/更改 VideoView 显示预览方向
如何在 Android Studio 中将一个 VideoView 放在另一个 VideoView 下方?