使用VideoView是能够设定为Android比例因子?默认情况下,视频视图调整自身大小以适合视频的编码分辨率。我可以强制的Android来呈现视频到一个较小的或较大的矩形?

有帮助吗?

解决方案

  

默认视频视图调整大小   本身以适应编码分辨率   的视频。

VideoView(或与SurfaceView使用MediaPlayer)将是你告诉它在你的布局规模。 在这一空间中,视频将回放尽可能大,同时保持高宽比。

  

我可以强制的Android渲染视频   成更小或更大的rect?

是:让你的VideoView是你想要的大小,而Android将进行缩放以适合VideoView的大小

其他提示

(我知道这是很老的问题,但还有另一种方式来控制尺寸,这在此不再赘述,也许有人会发现它的帮助。)

声明自己的 MyVideoView 类在布局和写自己的 onMeasure()的方法。这里是如何运行的视频拉伸到原始景观的尺度:


public class MyVideoView extends VideoView {
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int width = getDefaultSize(0, widthMeasureSpec);
  int height = getDefaultSize(0, heightMeasureSpec);

  setMeasuredDimension(width, height);
 }
}

我发现,当一个VideoView置于RelativeLayout的内部中,视频段的 两个 的高度和宽度,以适应VideoView的指定的高度和宽度(而不管可视方面的比)。然而,当我放置VideoView在的FrameLayout,视频延伸的高度和宽度,直到它的 之一 的VideoView的规定的高度或宽度(即,它不会破坏纵横比相匹配)。奇怪了,我知道,但是这是我的发现!

要设置"centerCrop"规模类型VideoViewonMeasure()layout()方法可以是这样的:


public class CenterCropVideoView extends VideoView {
    private int leftAdjustment;
    private int topAdjustment;

 ...
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int videoWidth = getMeasuredWidth();
        int videoHeight = getMeasuredHeight();

        int viewWidth = getDefaultSize(0, widthMeasureSpec);
        int viewHeight = getDefaultSize(0, heightMeasureSpec);

        leftAdjustment = 0;
        topAdjustment = 0;
        if (videoWidth == viewWidth) {
            int newWidth = (int) ((float) videoWidth / videoHeight * viewHeight);
            setMeasuredDimension(newWidth, viewHeight);
            leftAdjustment = -(newWidth - viewWidth) / 2;
        } else {
            int newHeight = (int) ((float) videoHeight / videoWidth * viewWidth);
            setMeasuredDimension(viewWidth, newHeight);
            topAdjustment = -(newHeight - viewHeight) / 2;

        }
    }

    @Override
    public void layout(int l, int t, int r, int b) {
        super.layout(l + leftAdjustment, t + topAdjustment, r + leftAdjustment, b + topAdjustment);
    }
}

我也想做到这一点,到目前为止这工作确定。我们的想法是使用setLayoutParams的视频视图,指定大小。这仅仅是一个简单的片段,但它给人的想法。检查的LayoutParams线。

VideoView mVideoView = new VideoView(this);

//intermediate code

mVideoView.setVideoPath("/sdcard/VIDEO0007.3gp");
MediaController mController = new MediaController(this);
mVideoView.setMediaController(mController);
mController.setOnTouchListener(new View.OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {
    int width = mVideoView.getMeasuredWidth();
    int height = mVideoView.getMeasuredHeight();
    //we add 10 pixels to the current size of the video view every time you touch     
    //the media controller.
    LayoutParams params = new LinearLayout.LayoutParams(width+10, height+10);
    mVideoView.setLayoutParams(params);

    return true;
}
});

mVideoView.requestFocus();
mVideoView.start();

要的 FeelGoods 答案。

如果没有布局()方法中的 “的 centerCrop”规模型较好,但VideoView必须处于的FrameLayout。

@Override
public void layout(int l, int t, int r, int b) {
    super.layout(l + leftAdjustment, t + topAdjustment, r + leftAdjustment, b + topAdjustment);
}

大家好我有其他的想法通过扩展VideoView,用u可以做ü什么都想要创建自己的VideoView类,.正是u必须在VideoView创建几个方法。

public void setDimensions(int w, int h) {
    this.mForceHeight = h;
    this.mForceWidth = w;

}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(mForceWidth, mForceHeight);
}

让自己的构造函数UR VideoView类,并确保该方法在乌拉圭回合自己videoview类,然后把它作为像机器人默认videoview成XML和类文件。

希望它能帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top