Android Как изменить полноэкранный режим VideoView / MediaPlayer по умолчанию? - PullRequest
1 голос
/ 20 октября 2011

В настоящее время я работаю над воспроизведением видео (файл .mp4, который хорошо работает на обоих планшетах Android) в VideoView. Сначала я использовал VideoView, но устройство (EKEN M003S) воспроизводило видео в полноэкранном режиме, а не в VideoView, для которого я установил ширину и высоту на 272 x 153 dp. Поэтому я попытался создать расширенный класс 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 продолжает воспроизводить видео в полноэкранном режиме. Поэтому, когда я запускаю приложение, все работает нормально, и видео воспроизводится в полноэкранном режиме на слое ниже всех других видов, что делает действие прозрачным с видео под ним.

Кроме EKEN M003S, я уверен, что некоторые устройства также имеют функции для принудительного воспроизведения видео в полноэкранном режиме по умолчанию, а также есть способ переопределить эту настройку по умолчанию. Если есть способ, пожалуйста, научите меня, как это сделать. Спасибо.

1 Ответ

1 голос
/ 26 октября 2011

http://clseto.mysinablog.com/index.php?op=ViewArticle&articleId=2992625

Я тестировал этот код на Asus TF 101 (разрешение 1280x800), и видео работало с разрешением 640x480. Попробуйте установить размеры в файле XML и в методе changeVideoSize (), попробуйте установить screenMode = DisplayMode.ORIGINAL

...