2011-01-06 153 views
41

因此,我扩展了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的引力设置为居中。

+0

能你为此提供了完整的代码...我坚持不住 – 2018-01-22 11:59:30

回答

106

尝试使用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> 
+0

我的代码是否适用于此? – DArkO 2011-02-01 04:14:41

+1

如果你对Android自动调整视频大小(如果在横向上,很可能会垂直填充屏幕,然后将水平大小保持比例),我认为你不需要任何代码。它应该与该代码一起工作,但如果您仍然需要它,无论出于何种原因 – Cameron 2011-02-01 13:40:19

+2

我不知道为什么,但是当在VideoView中搜索对齐视频时,Google不会显示它。在我得到这个相关的答案之前,我不得不开始写这个问题。谢谢! :) – jlindenbaum 2011-05-17 21:18:16

7

为中心的视频在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> 
7

卡梅隆的以编程的方式应答(万一有人像我一样需要它)这个代码是内部的活动的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);