我正在努力解决这个视频问题一段时间。我以为你可能有一些想法可以帮助我。
所以我在框架布局中使用了这个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上它根本不起作用。
答案 0 :(得分:2)
它可能依赖于底层本机代码,即用于SurfaceView(以及VideoView)实现的供应商(在您的情况下为Samsung)。此外,MediaPlayer也是VideoView的一部分,可以具有特定于设备的实现(也是原生的),它可以影响所有VideoView行为。