Android让VideoView填充满屏幕/父布局并保证不变形.md

在Android中简单的播放一下视频选用VideoView是一个不错的选择,各个厂商在出厂的时候一般都会测试视频播放,这个兼容性一般都能得到保证,而且使用VideoView播放会自动的纠正视频角度,但是有一个问题VideoView在使用过程中总是有一些空白区域留出来,很多时候我们想让他填充满屏幕,或者说父布局,于是就有了今天的议题(当然也可以通过OpenGL来自己画视频,想显示成什么样子就显示成什么样子,只不过这个相对来说麻烦一点)。

首先VideoView在使用的时候有一个坑,就是在初始化的时候一定要把视频地址给到它,否则视频是变形的,因为在布局的时候没有拿到视频的尺寸信息,所以初始化的时候并不知道要初始化多大的Surface,这就决定了VideoView的两种使用方式:

  1. 在xml里面放置的时候,那么在Activity onCreate的时候就需要把视频地址传进去。
  2. 动态的new VideoView()然后添加到指定的父控件里面,同时也需要把视频地址传进去

原理如下:

  1. 拿到视频地址后取出准确的视频宽高
  2. 在onSizeChanged的时候根据视频宽高和父布局的宽高来计算出VideoView的布局参数,把视频多出来的区域通过-margin来让它显示到控件外面去,进而达到填充满父控件的目的
  3. 重写onMeasure方法覆盖掉VideoView的逻辑,然后尽情享受吧

完整代码地址:https://www.bzblog.online/wordpress/index.php/2020/06/05/fillparentvideoview/

没有账号? 忘记密码?

社交账号快速登录