文档章节

videoview全屏播放

Thanks
 Thanks
发布于 2014/04/21 15:16
字数 630
阅读 9561
收藏 6
点赞 1
评论 0

真TMD的费劲 解决了

一、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
    }

    @Override
    protected 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);

© 著作权归作者所有

共有 人打赏支持
Thanks
粉丝 9
博文 82
码字总数 23216
作品 0
南阳
手机影音第九天,控制视频全屏播放与退出全屏播放,音量调节按钮来控制视频音量与静音的实现

代码以托管到码云,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一、视频全屏播放与退出全屏 系统默认的videoview类,没有调整大小的方法,因此需要自定义一...

老婆的宝宝 ⋅ 2017/07/21 ⋅ 0

Android各种视频播放器使用

视频播放器在App是很常见的,有哪些视频播放器呢?具体情况该用哪款呢?这里我总结了常用的视屏播放Videoview、mediaplayer+surfaceview、vitamio、jcplayer的使用方法并写了各自的播放示例。...

翻滚吧李博 ⋅ 2017/12/04 ⋅ 0

android videoview 有些视频 不能布满View

在android videoView 进行视频播放的时候,我发现,在播放不同的视频的时候,发现,有的能布满全屏,有的不能布满全屏,请问这是为什么哦? 我希望,只要是有效的视频,通过videoVIew进行播放...

天王盖地虎626 ⋅ 2017/06/03 ⋅ 0

关于对Android的videoView和mediaController的吐槽

这几天在做视频播放器一直在研究videoview。 videoview是和video连用的。2个组件分别都提供一个方法关联另一方: mediaController-setAnchorView(videoview),videoview-setMediaController(...

yizhihaohut ⋅ 2013/09/27 ⋅ 1

Android上定义播放器控件UniversalVideoView

在Android上播放视频最简单的方法是使用SDK中内置的VideoView,然后加上MediaController来控制视频播放暂停等,但是这样有一个缺点是无法定制自己的控制UI,所以这里提供一个自定义播放控件,它可...

linsea ⋅ 2015/10/26 ⋅ 122

主流视频客户端核心代码的实现

Android原生的VideoView的样式真心弱爆了,但是拥有巨大用户量的网易新闻客户端居然使用的就是这个,真心服了网易的产品经理。目前主流的视频网站,国内的如优酷、土豆、爱奇艺、搜狐,国外的...

Jack_1900 ⋅ 2014/07/26 ⋅ 6

破手机变儿歌播放器

找到一个触摸屏不能相应触摸,但显示没有问题的手机,写了个小程序,用来给宝宝播放儿歌。 电脑控制手机软件 Total Controlhttp://tc.sigma-rt.com.cn/ 应用设为开机启动 manifest.xml文件设...

开源中国首席辣条代理 ⋅ 2016/07/10 ⋅ 0

视频列表播放, 全屏播放切换问题

参考过今日头条等 需要在列表播放 测试过如下方式 1, 使用POPUPWINDOW效果最好但是, 遇到的问题他是模态窗体, 返回键无法生效, touch事件无法正常往下船体DDMS无法获取窗体布局 2,自定义的V...

HelloCOS ⋅ 2016/05/25 ⋅ 0

[Android学习笔记八] 使用VideoView屏幕方向发生变化,视频方向自动切换

一个Activity主要用来做播放视频使用,并且是全屏播放的话,主要采用横屏(Landscape orientation 显示宽度大于高度)显示视频,那么可以指定Activity的属性android:screenOrientation="land...

secondriver ⋅ 2015/12/01 ⋅ 0

android 播放视频问题

各位大神,最近在弄一个校学通的项目,可是在弄视频控件的时候,在播放视频时候不知道怎么自定义一个MediaController(全屏视频的功能),还有就是视频在播放的时候总是不能布满整个VideoVi...

狗哥曾年轻过 ⋅ 2015/11/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 36分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 45分钟前 ⋅ 0

appium+python3.6

1.安装jdk1.8(不知道为啥只识别1.8,1.10不识别,所以为了少折腾,迁就安装1.8) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置 JAVA_HOME:...

Kampfer ⋅ 今天 ⋅ 0

详解Apache 日志分割教程

一、日志切割 安装cronolog CentOS 5.3中编译安装Apache日志默认是不切割的,需要用用工具Cronnolog进行日志切割。 1.下载及安装 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz ...

dragon_tech ⋅ 今天 ⋅ 0

Keepalived介绍

负载均衡器(Load Balancer, LB )是一组能够将IP数据流以负载均衡形式转发到多台物理服务器的集成软件。有硬件负载均衡器和软件负载均衡器之分,硬件负载均衡器主要是在访问网络和服务器之间...

寰宇01 ⋅ 今天 ⋅ 0

java8-Collections and Streams

stream和集合的区别是什么? 1.在计算的时候处理不同, 2.every element should be computed in the memory and then to be part of collections stream Stream apis filter with a predica......

writeademo ⋅ 今天 ⋅ 0

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你...

honeymose ⋅ 今天 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 今天 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 今天 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部