可以通过编写自定义View,覆盖VideoView的默认行为来解决这个问题。以下是一个示例代码:
public class ScalableVideoView extends VideoView {
private int mVideoWidth;
private int mVideoHeight;
public ScalableVideoView(Context context) {
super(context);
}
public ScalableVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScalableVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mVideoWidth == 0 || mVideoHeight == 0) {
setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight());
} else {
int width = getMeasuredWidth();
int height = getMeasuredHeight();
float scaleX = (float) mVideoWidth / (float) width;
float scaleY = (float) mVideoHeight / (float) height;
float scale = Math.max(scaleX, scaleY);
width = (int) ((float) mVideoWidth / scale);
height = (int) ((float) mVideoHeight / scale);
setMeasuredDimension(width, height);
}
}
public void setVideoSize(int videoWidth, int videoHeight) {
mVideoWidth = videoWidth;
mVideoHeight = videoHeight;
requestLayout();
}
}
您可以将此自定义视图放在XML中,并像VideoView一样使用它。要指定视频的大小,请使用setVideoSize()方法:
mScalableVideoView.setVideoSize(videoWidth, videoHeight);