1

私は現在、VideoViewのビデオ(2つのアンドロイドタブレットでうまく動作する.mp4ファイル)を再生するために取り組んでいます。最初に私はVideoViewを使用しましたが、デバイス(EKEN M003S)はVideoView内ではなく全画面でビデオを再生しました。これは幅と高さを272 x 153 dpで設定しました。だから私はonMeasure()とchangeVideoSize()をオーバーライドするVideoViewの拡張クラスを作ろうとしました。このように:AndroidデフォルトのVideoView/MediaPlayerフルスクリーンを変更するには?

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 
} 

私はそのサイズのものであるとのMP4ビデオの幅と高さを強制的に幅272、高さ153に入ったが、EKEN M003Sは、フルスクリーンモードでビデオを再生し続けています。だから、私がアプリケーションを実行すると、すべて正常に動作し、ビデオは、その下のビデオでアクティビティを半透明にする、他のすべてのビューの下のレイヤーでフルスクリーンで再生されます。

EKEN M003S以外にも、一部のデバイスにはデフォルトでフルスクリーンでビデオを再生させる機能もあり、そのデフォルト設定を上書きする方法もあります。方法がある場合は、それを行う方法を教えてください。ありがとうございました。

+0

「一部のデバイスには、ビデオを強制的にフルスクリーンで再生させる機能もあると確信しています」 - 正当なものはありません。それらのAndroidマーケット。これは市場の互換性テストに合格しません。したがって、分析が正しいことが確かな場合は、製造元に連絡し、互換性のないAndroidフォークを回避する方法を尋ねる必要があります。 – CommonsWare

答えて

関連する問題