调整视频视图大小

8

我想动态设置Android VideoView的大小。我在StackOverflow和互联网上查找了很多,最好的解决方案是来自这里。我将我的实现放在下面:

public class ResizableVideoView extends VideoView {

    public ResizableVideoView(Context c) {
        super(c);
    }

    private int mVideoWidth = 100;
    private int mVideoHeight = 100;

    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(width, height); 
        
        forceLayout();
        invalidate(); // very important, so that onMeasure will be triggered
    } 

    public void onMeasure(int specwidth, int specheight) {
        Log.i("onMeasure","On Measure has been called");
        setMeasuredDimension(mVideoWidth, mVideoHeight);
    }

    public void onDraw(Canvas c) {
        super.onDraw(c);
        Log.i("onDraw","Drawing...");
    }
}

在Android模拟器以及摩托罗拉Droid X上,视频大小调整正确;但是在摩托罗拉Droid上,VideoView会调整大小,但是在VideoView中播放的视频不会调整大小。在摩托罗拉Droid上,如果将VideoView设置为比视频播放更大的尺寸,则VideoView中会出现黑色背景,并且视频播放在黑色背景的左上角。

如何在Android中正确调整VideoView的大小?

谢谢, Vance

1个回答

3

我的实现方式如下:

RelativeLayout.LayoutParams videoviewlp = new RelativeLayout.LayoutParams(newwidth, newheight);
    videoviewlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    videoviewlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    videoview.setLayoutParams(videoviewlp);
    videoview.invalidate();

通过使视频视图无效,您将强制其使用新的LayoutParams(和新的尺寸)重新绘制整个视频视图。

我测试了一下,但它裁剪了视频而不是调整大小!你有什么想法吗? - boomz
1
@boomz 我终于在去年夏天创建了一个实现。请查看App Inventor项目中的VideoPlayer类(截至去年夏天,调整大小的代码是我完成的)。 - Vance-Turner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接