在VideoView中放置视频
因此,我扩展了VideoView的onMeasure以放大视频以适应全屏视图。在VideoView中放置视频
这里是如何:
public void setVideoAspect(int w,int h){
wVideo=w;
hVideo=h;
onMeasure(w, h);
}
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if(wVideo!=0 && hVideo!=0)
setMeasuredDimension(wVideo,hVideo);
}
我打电话与屏幕的显示的指标(宽度,高)setVideoAspect()。问题是这种方法会将视频延伸到屏幕内部。我希望能够保持宽高比。 (I具有4:3视频和3:2的屏幕尺寸。)我使用了如下因素代码,得到保留比测量到视图:
int height = (int) (metrics.widthPixels*3/(float)4);
int width= metrics.widthPixels;
mVideoView.setVideoAspect(width,height);
所以这不会工作,但存在这样的问题:它使我使用屏幕宽度的4:3视频并正确缩放高度,但不会使视频居中。 (它只是裁剪视频的底部,而不是顶部和底部)。我有一个包含VideoView的相对布局,并将VideoView的引力设置为居中。
尝试使用FrameLayout代替。我不知道为什么,但如果我在我的代码中使用线性或相对,它不会居中,但框架会。这里是一个适合我的视频画面,保存率和定心它的XML:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg">
<!-- Video player -->
<VideoView android:id="@+id/surface_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">
</VideoView>
</FrameLayout>
我的代码是否适用于此? – DArkO 2011-02-01 04:14:41
如果你对Android自动调整视频大小(如果在横向上,很可能会垂直填充屏幕,然后将水平大小保持比例),我认为你不需要任何代码。它应该与该代码一起工作,但如果您仍然需要它,无论出于何种原因 – Cameron 2011-02-01 13:40:19
我不知道为什么,但是当在VideoView中搜索对齐视频时,Google不会显示它。在我得到这个相关的答案之前,我不得不开始写这个问题。谢谢! :) – jlindenbaum 2011-05-17 21:18:16
为中心的视频在RelativeLayout的我加了两个layout_gravity="center"
广告layout_centerInParent="true"
。它适用于我的Android 4.3手机。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<VideoView android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_centerInParent="true" />
</RelativeLayout>
卡梅隆的以编程的方式应答(万一有人像我一样需要它)这个代码是内部的活动的onCreate在我的代码(“这”下面是指活动)
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
FrameLayout fl = new FrameLayout(this);
fl.setLayoutParams(lp);
VideoView vv = new VideoView(this);
FrameLayout.LayoutParams lp2 = new FrameLayout.LayoutParams(lp);
lp2.gravity = Gravity.CENTER;
vv.setLayoutParams(lp2);
fl.addView(vv);
setContentView(fl);
能你为此提供了完整的代码...我坚持不住 – 2018-01-22 11:59:30