You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin实现VideoView左侧黑边问题求助

解决VideoView播放视频左侧出现黑边的问题

1. 先排除视频源本身的问题

首先确认你导入的视频文件本身左侧没有黑边——用本地播放器打开视频检查,若视频本身带黑边,需先处理视频文件。

2. 调整VideoView的缩放与显示模式

黑边大多是视频分辨率与VideoView尺寸比例不匹配导致的,可通过以下两种方式修正:

方式一:在代码中设置媒体播放器的缩放模式

在setOnPreparedListener中添加缩放配置,强制视频按比例填充整个VideoView区域:

videoView.setOnPreparedListener { mediaPlayer ->
    mediaPlayer.isLooping = false
    // 按比例缩放填充View,超出部分裁剪,避免单侧黑边
    mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING)
}

若想完整显示视频(不裁剪,可能上下/左右留边,但不会出现单侧黑边),可改用:

mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT)

方式二:设置VideoView的ScaleType

在布局文件中给VideoView添加属性,或在代码中配置:

<VideoView
    android:id="@+id/videoView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop" />

对应代码设置:

videoView.scaleType = VideoView.ScaleType.CENTER_CROP

centerCrop会让视频按比例放大填满View,超出部分被裁剪;若用fitXY会强制拉伸视频填满,但可能导致画面变形,不推荐。

3. 检查布局约束与尺寸

确保VideoView的布局参数没有被额外padding或margin限制,比如父布局是否有左侧padding,或VideoView的宽高是否设为固定值导致比例失调。建议将VideoView的宽高设为match_parent(或根据父布局约束自适应)。

修改后的完整playVideo函数示例

private fun playVideo() {
    val videoUri = Uri.parse("android.resource://" + requireActivity().packageName + "/" + R.raw.videooooo)
    Log.d("VideoPlayer", "URI do vídeo: $videoUri")

    try {
        videoView.setVideoURI(videoUri)
        // 设置ScaleType适配布局
        videoView.scaleType = VideoView.ScaleType.CENTER_CROP
        videoView.setOnPreparedListener { mediaPlayer ->
            mediaPlayer.isLooping = false
            // 配合媒体播放器缩放模式
            mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING)
        }
        videoView.setOnCompletionListener {
            Log.d("VideoPlayer", "Vídeo reproduzido completamente.")
        }

        val mediaController = MediaController(requireContext())
        mediaController.setAnchorView(videoView)
        videoView.setMediaController(mediaController)

        videoView.setOnTouchListener { _, _ ->
            mediaController.show()
            false
        }
        videoView.start()
    } catch (e: Exception) {
        Log.e("VideoPlayer", "Erro ao reproduzir vídeo: ${e.message}", e)
    }
}

内容的提问来源于stack exchange,提问作者Ruan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:31:05