博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用VideoView做个实用的视频播放器
阅读量:6198 次
发布时间:2019-06-21

本文共 2670 字,大约阅读时间需要 8 分钟。

目录

  • 最终效果图
  • 前言
  • 布局文件
  • VideoView的使用
  • 横竖屏切换
  • 文件选择
  • 手势调节音量
  • 最后

最终效果图


前言

这里用VideoView写一个播放器, 可以横竖屏, 可以选文件, 可以暂停, 可以快进后退, 可以进度条拖动, 可以触屏调节音量. 来看看怎么实现的吧!


布局文件

RelativeLayout包裹VideoView是要点, 常规设置会形变的. 当然了, 还要重写onConfigurationChanged, 见后面横竖屏切换.

复制代码

VideoView的使用

VideoView使用起来非常简单, 设置好MediaController, 然后设置URI或者是Path, 然后start开始就好. 这里的要点是一些使用功能的实现. 可以查阅.


横竖屏切换

第一步是到配置文件里面设置. 在activity标签下添加android:configChanges="keyboard|orientation|screenSize". 这样的话, 屏幕切换的时候不会去调用onStop等方法. 我们在Toolbar里面添加切换横竖屏按钮, 然后重写onConfigurationChanged.

@Overridepublic void onConfigurationChanged(Configuration newConfig) {    super.onConfigurationChanged(newConfig);    if (mVvVideo == null) {        return;    }    if (this.getResources().getConfiguration().orientation            == Configuration.ORIENTATION_LANDSCAPE) {        // 横屏        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);        getWindow().getDecorView().invalidate();        float height = new ScreenUtil(this).getAppWidth();        float width = new ScreenUtil(this).getAppHeight();        mRlVv.getLayoutParams().height = (int) width;        mRlVv.getLayoutParams().width = (int) height;    } else {        // 竖屏        final WindowManager.LayoutParams attrs = getWindow().getAttributes();        attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);        getWindow().setAttributes(attrs);        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);        float width = new ScreenUtil(this).getAppWidth();        float height = DisplayUtil.dp2px(this, 200.f);        mRlVv.getLayoutParams().height = (int) height;        mRlVv.getLayoutParams().width = (int) width;    }}复制代码

里面有几个uitl, 都是常见的封装, 不多说了. 这样就可以实现横竖屏切换了.


文件选择

关于文件选择器, 请查看我. 然后就是要返回选中的文件路径. 这是Intent的常规使用了. 不多说了.


手势调节音量

添加触摸监听, 然后用手势操作实现. 然后是依据上下划方向确定增大还是减小音量. 调节音量的代码也是很常规的了.

@Overridepublic boolean onTouch(View v, MotionEvent event) {    return mGestureDetector.onTouchEvent(event);}复制代码
@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {    float v = e2.getY() - e1.getY();    if (Math.abs(v) > 10) {        setVoiceVolume(v);    }    return true;}复制代码
private void setVoiceVolume(float value) {    int currentVolume = mAM.getStreamVolume(AudioManager.STREAM_MUSIC);    int maxVolume = mAM.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    int flag = value > 0 ? -1 : 1;    currentVolume += flag * 0.15 * maxVolume;    mAM.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0);}复制代码

最后

如果想更多的DIY, 可以考虑使用SurfaceView, 但是VideoView大部分时候也够用了. 喜欢记得点赞或者关注我, 有意见或者建议评论区见.


转载地址:http://dbnca.baihongyu.com/

你可能感兴趣的文章
android SDK 源码 -----建造这模式(生成器模式)
查看>>
OSChina 周六乱弹——今天你自拍了吗?
查看>>
OSChina 周一乱弹 ——月薪三万长的帅的为啥找不到女朋友
查看>>
java并发库之Executors常用的创建ExecutorService的几个方法说明
查看>>
Sonar Runner2.4 安装配置
查看>>
深入理解Ehcache系列(五)
查看>>
java5线程并发库的应用
查看>>
020# Adempiere的会计功能模组(一)
查看>>
舌尖上的程序猿
查看>>
Highcharts参数大全
查看>>
函数式编程
查看>>
datav.js
查看>>
java之不可变对象--java并发编程实践
查看>>
php编译完成后安装mysql扩展
查看>>
LSA
查看>>
java对象的克隆
查看>>
lVS(nat模式)+keepalived搭建
查看>>
用数据冗余换取查询性能
查看>>
JVM快速调优手册03:内存分配策略
查看>>
nginx之ngx_errno.c文件阅读
查看>>