所以我扩展了VideoView的onMeasure以扩展视频以适应全屏视图 .
这是如何:
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() . 问题是这种方法会拉伸视频以适应屏幕内部 . 我希望能够保持纵横比 . (我有4:3的视频和3:2的屏幕尺寸 . )我使用下面的代码给视图保留比率测量值:
int height = (int) (metrics.widthPixels*3/(float)4);
int width= metrics.widthPixels;
mVideoView.setVideoAspect(width,height);
所以这可以完成这项工作,但是有一个问题:它给了我一个4:3的视频,屏幕的宽度和正确的比例,但它不会使视频居中 . (它只是播放视频的底部而不是顶部和底部 . )我有一个包含VideoView的相对布局,VideoView的重力设置为居中 .
4 回答
请尝试使用
FrameLayout
. 我不知道为什么,但是如果我在我的代码中使用Linear
或Relative
它不会居中,但FrameLayout
会 . 这是适合我的视频到屏幕的XML,保留比率并使其居中:为了将视频集中在 RelativeLayout 中,我添加了
layout_gravity="center"
adlayout_centerInParent="true"
. 它适用于我的Android 4.3手机 .Cameron以程序化的方式回答(如果像我这样的人需要它)这段代码在我的代码中的一个活动的创建内部('this'在下面指的是活动)
这适用于保持视频宽高比的任何视频 . 它将视频定位在VideoView内,并像ImageView一样执行Center Crop或Center Inside .
我使用VideoView来覆盖整个ConstraintLayout . 您可以使用match_parent作为宽度和高度的任何其他布局 .
在onCreate:
希望它可以帮到某人!