そこで、VideoView の onMeasure を拡張して、フルスクリーン ビュー内に収まるようにビデオを拡大しました。
方法は次のとおりです。
public void setVideoAspect(int w,int h){
wVideo=w;
hVideo=h;
onMeasure(w, h);
}
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if(wVideo!=0 && hVideo!=0)
setMeasuredDimension(wVideo,hVideo);
}
画面の表示メトリック (幅、高さ) で setVideoAspect() を呼び出します。問題は、この方法ではビデオが画面内に収まるように引き伸ばされることです。アスペクト比を維持できるようにしたい。(私は 4:3 のビデオと 3:2 の画面サイズを持っています。) 次のコードを使用して、保持された比率の測定値をビューに与えました。
int height = (int) (metrics.widthPixels*3/(float)4);
int width= metrics.widthPixels;
mVideoView.setVideoAspect(width,height);
これでうまくいきますが、問題があります。画面の幅で 4:3 のビデオが表示され、高さが正しくスケーリングされますが、ビデオが中央に配置されません。(ビデオの上部と下部を均等にトリミングするのではなく、下部をトリミングするだけです。) VideoView の重力が中央に設定された VideoView を含む相対的なレイアウトがあります。