关于缩放VideoView的问题

时间:2012-01-30 14:24:13

标签: android video

我正在努力解决这个视频问题一段时间。我以为你可能有一些想法可以帮助我。

所以我在框架布局中使用了这个VideoView,在顶部我有一个ToggleButton来进行缩放并从缩放中恢复。

<CustomVideoView
        android:id="@+id/video_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:keepScreenOn="true" >
</CustomVideoView> 

我有一个480x360的视频,我认为在进行人像缩放时,我会根据视频比率在屏幕高度和计算出的宽度上调整大小(否则为横向)。

我使用以下方法将VideoView扩展到CustomVideoView:

    public class CustomVideoView extends VideoView {

    protected int _overrideWidth = 480;

    protected int _overrideHeight = 360;

    public CustomVideoView(Context context) {
        super(context);
    }

    public CustomVideoView(Context context, AttributeSet set) {
        super(context, set);
    }

    public void resizeVideo(int width, int height) {
        _overrideHeight = height;
        _overrideWidth = width;
        // not sure whether it is useful or not but safe to do so
        getHolder().setFixedSize(width, height); 
        requestLayout();
        invalidate(); // very important, so that onMeasure will be triggered
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        setMeasuredDimension(_overrideWidth, _overrideHeight);
    }
}
在一些设备上,这个技巧很好,但是在谷歌Nexus 4.0.3上,它将视频延伸到屏幕上,在Galaxy S 2.3.3上它根本不起作用。

1 个答案:

答案 0 :(得分:2)

它可能依赖于底层本机代码,即用于SurfaceView(以及VideoView)实现的供应商(在您的情况下为Samsung)。此外,MediaPlayer也是VideoView的一部分,可以具有特定于设备的实现(也是原生的),它可以影响所有VideoView行为。