Android VideoView无法显示视频完整宽度的技术求助
解决Android VideoView无法占满屏幕宽度的问题
嘿,我来帮你搞定这个VideoView只显示左侧75%宽度的问题~
这个情况通常是因为VideoView默认会保持视频的原始宽高比,如果你的视频本身是4:3这类比例,而容器是全屏宽度的话,就会自动缩小宽度来适配高度,导致右侧留出空白。下面给你几个实用的解决方案:
方案1:直接设置缩放模式(简单快速)
如果你不在乎视频是否被拉伸变形,直接在XML的VideoView里添加android:scaleType="fitXY"属性,强制视频填满整个容器:
<LinearLayout android:layout_height="200dp" android:orientation="vertical" android:layout_width="match_parent"> <VideoView android:id="@+id/video_player" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" /> </LinearLayout>
这个方法最快,但会让视频强制适配容器尺寸,可能出现画面拉伸变形的情况。
方案2:自定义VideoView保持宽高比(无变形填满宽度)
如果想保持视频的原始比例,同时让宽度占满屏幕,可以自定义一个VideoView,重写onMeasure方法来计算合适的高度:
第一步:创建CustomVideoView类
public class CustomVideoView extends VideoView { public CustomVideoView(Context context) { super(context); } public CustomVideoView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int videoWidth = getVideoWidth(); int videoHeight = getVideoHeight(); if (videoWidth > 0 && videoHeight > 0) { // 按屏幕宽度计算对应高度,保持视频比例 float aspectRatio = (float) videoWidth / videoHeight; int newHeight = (int) (MeasureSpec.getSize(widthMeasureSpec) / aspectRatio); setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), newHeight); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } }
第二步:修改XML布局
把原来的VideoView换成自定义的View,同时把容器的高度改成wrap_content,让它自动适配视频高度:
<LinearLayout android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="match_parent"> <com.yourpackage.CustomVideoView android:id="@+id/video_player" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
这样视频会完美占满屏幕宽度,同时保持原始比例,不会变形,容器高度也会自动调整到合适的尺寸。
方案3:使用centerCrop裁剪视频(适合允许裁剪的场景)
如果你的视频内容允许裁剪上下部分,也可以用android:scaleType="centerCrop",它会让视频按比例放大,填满容器,超出部分自动裁剪:
<VideoView android:id="@+id/video_player" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" />
这个方法不会变形,但会裁剪掉视频的上下部分,适合风景类等对边缘内容不敏感的视频。
内容的提问来源于stack exchange,提问作者Nuwan Withanage
相关产品推荐
相关产品推荐

