From bc144da9e0d54100d7bc941169dc407d5c67ffed Mon Sep 17 00:00:00 2001 From: Quyunshuo Date: Tue, 14 Mar 2023 19:00:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20VideoView=20?= =?UTF-8?q?=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/ktx/VideoViewKtx.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/VideoViewKtx.kt diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/VideoViewKtx.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/VideoViewKtx.kt new file mode 100644 index 0000000..b6bbef0 --- /dev/null +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/VideoViewKtx.kt @@ -0,0 +1,42 @@ +package com.quyunshuo.androidbaseframemvvm.base.ktx + +import android.media.MediaPlayer +import android.view.ViewGroup +import android.widget.VideoView + +/** + * 根据视频的尺寸与容器尺寸比例,动态调整 [VideoView] 的尺寸以适应视频的尺寸 + * 解决 [VideoView] 尺寸比例与视频尺寸比例不一致导致视频拉伸的问题 + * + * 容器可以是屏幕或者 [VideoView] + * + * 使用方式: + * 1. 通过 [VideoView.setOnPreparedListener] 向 [VideoView] 设置 [MediaPlayer.OnPreparedListener] 监听 + * 2. 通过 [MediaPlayer.OnPreparedListener] 回调获取到视频的真实宽高,调用该方法传入参数进行适配 + * 3. 如果需要考虑横竖屏切换,请在横竖屏改变监听回调中再次调用该方法进行适配 + * + * @receiver [VideoView] + * @param containerW Float 容器的真实宽 + * @param containerH Float 容器的真实高 + * @param videoW Float 视频的真实宽 + * @param videoH Float 视频的真实高 + */ +fun VideoView.resetVideoViewDimensions( + containerW: Float, + containerH: Float, + videoW: Float, + videoH: Float, +) { + // 计算宽高比进行调整宽高 + this.layoutParams = if (videoW / containerW < videoH / containerH) { + this.layoutParams.apply { + width = ViewGroup.LayoutParams.WRAP_CONTENT + height = ViewGroup.LayoutParams.MATCH_PARENT + } + } else { + this.layoutParams.apply { + width = ViewGroup.LayoutParams.MATCH_PARENT + height = ViewGroup.LayoutParams.WRAP_CONTENT + } + } +} \ No newline at end of file