VideoView与视频比例缩放:

以前在论坛上也看到有人问过如何实现视频按比例缩放的问题。的确,如果仅仅使用VideoView可能达不到我们想要达到的效果。这就需要我们对VideoView做一些改动,简单的说就是另外写一个类似VideoView的类出来(庆幸Android是开源的)。我们可以很方便的获得VideoView的源代码,最简单的方法是直接在GoogleCodeSearch上找“VideoView.java”。所以重写VideoView的过程其实只是在原来的基础上进行一些修改而已,并非一个很麻烦的工作。为什么Android自带的VideoView会保持视频的长宽比而不能让我们很方便的自定义比例呢?我猜想可能Google做Android也是一个很仓促的工程,许多代码并没有考虑得太成熟。VideoView的源码中有这样一段代码:

1 @Override
2 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
3 //Log.i(“@@@@“, “onMeasure”);
4 int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
5 int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
6 if (mVideoWidth > 0 && mVideoHeight > 0) {
7 if ( mVideoWidth * height > width * mVideoHeight ) {
8 //Log.i(“@@@“, “image too tall, correcting”);
9 height = width * mVideoHeight / mVideoWidth;
10 } else if ( mVideoWidth * height < width * mVideoHeight ) {
11 //Log.i(“@@@“, “image too wide, correcting”);
12 width = height * mVideoWidth / mVideoHeight;
13 } else {
14 //Log.i(“@@@“, “aspect ratio is correct: " +
15 //width+“/“+height+“=“+
16 //mVideoWidth+“/“+mVideoHeight);
17 }
18 }
19 //Log.i(“@@@@@@@@@@“, “setting size: " + width + 'x' + height);
20 setMeasuredDimension(width, height);
21 }
22

这就是为什么长宽比不能改变的原因了。因为在OnMeasure的时候,就对这个长宽比进行了处理。我们把其中处理的代码屏蔽掉,视频大小就可以随着VideoView的长宽改变而改变了。

1 @Override
2 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
3 //Log.i(“@@@@“, “onMeasure”);
4 int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
5 int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
6 /*//if (mVideoWidth > 0 && mVideoHeight > 0) {
7 if ( mVideoWidth * height > width * mVideoHeight ) {
8 //Log.i(“@@@“, “image too tall, correcting”);
9 height = width * mVideoHeight / mVideoWidth;
10 } else if ( mVideoWidth * height < width * mVideoHeight ) {
11 //Log.i(“@@@“, “image too wide, correcting”);
12 width = height * mVideoWidth / mVideoHeight;
13 } else {
14 //Log.i(“@@@“, “aspect ratio is correct: " +
15 //width+“/“+height+“=“+
16 //mVideoWidth+“/“+mVideoHeight);
17 }
18 }*/
19 //Log.i(“@@@@@@@@@@“, “setting size: " + width + 'x' + height);
20 setMeasuredDimension(width,height);
21 }

自定义VideoView
public class CustomVideoView extends VideoView {

    private int mVideoWidth;private int mVideoHeight;public CustomVideoView(Context context) {super(context);// TODO Auto-generated constructor stub}public CustomVideoView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stub// Log.i("@@@@", "onMeasure");//下面的代码是让视频的播放的长宽是根据你设置的参数来决定int width = getDefaultSize(mVideoWidth, widthMeasureSpec);int height = getDefaultSize(mVideoHeight, heightMeasureSpec);setMeasuredDimension(width, height);}

}

MediaController controller = new MediaController(this);

    mVideoView = (CustomVideoView)findViewById(R.id.videoView1);mVideoView.setMediaController(controller);mVideoView.setVideoPath(mVideoPath);

videoview全屏播放相关推荐

  1. Android : Dialog中VideoView全屏播放

    Android : Dialog中VideoView全屏播放 前几天公司要求在引导页播放视频,如果跳转到activity去进行播放,再返回时生命周期方法调动会不太好,最后改成了在引导页构建一个Dial ...

  2. Android VideoView播放 项目中的 视频文件 自动横屏 全屏播放

    记录最近遇到的一个android播放视频的需求: APP主页上方有一个操作演示字样的入口,点击后开始播放一段视频,视频文件是放在工程里的. 话说以前还没做过类似播放视频的功能,根据以往的经验来看,最简 ...

  3. android 4.0以上WebView不能全屏播放视频的解决办法

    上次鄙人做了一个简单的利用webView实现的一个浏览器!其中遇到了两个问题,一个是将浏览器中需要下载的内容托管到系统默认的下载程序进行下载,这个比较简单就不在这里讨论了:另一个问题就是我们的Andr ...

  4. android 启动视频,android 启动页面全屏播放视频

    有时候大家在启动软件的时候,会看到有一个比较炫酷的短视频,觉得很有意思,现在做项目的时候也遇到了,跟大家分享一下. 首先,在 res 目录下建一个文件夹 raw, 把你的视频文件(.mp4等)放进去. ...

  5. Chromium为视频标签 video 全屏播放的过程分析

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在Chr ...

  6. Chromium为视频标签video全屏播放的过程分析

    在Chromium中,<video>标签有全屏和非全屏两种播放模式.在非全屏模式下,<video>标签播放的视频嵌入在网页中显示,也就是视频画面作为网页的一部分显示.在全屏模式 ...

  7. Android全屏播放视频~包括刘海屏、隐藏时间状态栏

    需求是全屏播放视频,刘海屏上面也要播放. 下面是我实现的方式: 首先创建 CustomVideoView 工具类: import android.annotation.TargetApi; impor ...

  8. android webview 横竖屏_WebView实现全屏播放的一种方法

    用过WebView的开发者们肯定都知道这里面的坑数不胜数,加载缓慢,内存泄露,文件选择......没错,全屏播放视频,这又是一个大坑.一个没有修饰过的原生WebView几乎不可能在某一个主流视频网站实 ...

  9. [Winform]Media Player组件全屏播放的设置

    摘要 在设置程序开始运行时,让视频全屏播放时,直接设置 windowsMediaPlay.fullScreen = true; 会报错,代码如下 windowsMediaPlay.URL =_vide ...

最新文章

  1. 机器学习(Machine Learning)深入学习(Deep Learning)资料
  2. Python编程基础:第九节 逻辑运算Logical Operators
  3. 计算机猜数游戏matlab,MATLAB课程设计报告猜数游戏设计
  4. 跟我一起学.NetCore之日志(Log)模型核心
  5. 3月14日dnf服务器维护,DNF体验服3月14日更新介绍 肝深渊送爆肝王称号!
  6. 推荐算法为啥这么“灵”,又为啥会“失灵”?
  7. 2018年12月精选文章目录一览
  8. java获取文件目录列表_获取目录中的文件列表
  9. 《社会调查数据管理——基于Stata 14管理CGSS数据》一第1章 导言1.1 数据管理不被重视...
  10. 化龙小型汽车考场手动挡C1科三考试技巧
  11. 物料搬运设备中的链条和链轮的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. python爬虫豆瓣评论_Python爬虫实战:分析《战狼2》豆瓣影评
  13. 基于MAC地址划分VLAN
  14. Win10本地配置完hadoop_home任然报错Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  15. linux安装pangolin python版
  16. excel计算二元线性回归_谁说菜鸟不会数据分析(高级篇)及竞争力 excel②
  17. AUTOCAD——调整十字光标、CAD表格文字对齐方式
  18. 计算机面试专业英语词汇,面试常用英语,英语面试常用词汇?
  19. 京东 API接口:item_search - 按关键字搜索商品
  20. 葫芦娃手游服务器未响应,葫芦娃充值没反应 充值元宝未到账解决办法

热门文章

  1. 工厂方法(父类定义创建对象的接口,通过多态让子类来创建具体的对象)
  2. AprilTag程序的获取
  3. 前向传播和反向传播_深度学习的地基模块:模型、参数、非线性、前向传播、反向偏微分
  4. Google Guava 概要
  5. nginx php动态编译加载模块.
  6. 自动化部署必备技能—定制化RPM包[转载]
  7. LoadRunner解决超时错误
  8. 架构之路--实战项目记录(二) 忘记数据库 开始抽象
  9. Java中的单例模式
  10. windows 网络规划