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:使用默认视频播放器

视频超出了 Android 中 VideoView 的边界

如何在 Android Studio 中将一个 VideoView 放在另一个 VideoView 下方?

无法在android的videoview中播放来自url的视频如何在videoview中播放来自URL的视频?

无法让 Vitamio VideoView 播放普通 Android VideoView 会播放的视频文件