效果:

普通模式多画面 / 全屏播放

小窗模式

布局和拖拽功能介绍

普通窗口下的视图层级关系

将AutoMonitorPlayer作为控件时,layout图层关系如上图。AutoMonitorPlayer内部包含一个FrameLayout,将SurfaceView包含在内。

页面小窗

当切换到小窗模式时,AutoMonitorPlayer将容器Framelayout删除出子节点,外部的根节点android.R.id.content再将容器FrameLayout加为子节点://父节点变了,需要从老的父节点处删掉容器

this.removeView(mContainer);

//android.R.id.content是MainActivity布局最外面的一层FrameLayout

ViewGroup contentView =(ViewGroup)NiceUtil.scanForActivity(mContext).findViewById(android.R.id.content);

FrameLayout.LayoutParams params =mConfig.getTinyWindowLayoutParams();contentView.addView(mContainer,params);

关于小窗的拖拽,自定义继承自FrameLayout的类(DragFrameLayout)作为SurfaceView容器类,接收到onTouch回调的移动消息后,调用layout修改自己的位置,接收到up消息后,调用setLayoutParams修改自身窗口参数://临时修改视图显示

layout(oriLeft,oriTop,oriRight,oriBottom);

//这里修改gravity,使用left和top为Margins的定位参数,只需要给这两个值就可以了((LayoutParams)oldParams).gravity= Gravity.LEFT| Gravity.TOP;((LayoutParams)oldParams).setMargins(oriLeft,oriTop,0,0);setLayoutParams(oldParams);

必须要说明的是,目前这种实现方式,小窗还是和页面绑定的。如果要全局窗口,需要新建全局弹窗,再将FrameLayout作为该全局弹窗的视图子节点。

全局小窗

全局窗口需要使用AlertDialog(TinyDialog):getWindow().getAttributes().type=  WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

使用AlertDialog要注意权限的申请,除了AndroidManifest.xml中申明权限,如果是android6.0以上的SDK,还需要在代码中动态申请权限:context.startActivityForResult(newIntent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,        Uri.parse("package:"+ context.getPackageName())), 0);

创建了全局窗口,我们就要把FrameLayout容器放入这个窗口:mTinyDialg.addContentView(mContainer,newFrameLayout.LayoutParams(        ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

如图,和页面内小窗比较类似,不同的是AlertDiaolg不再属于应用中的布局,即使切出应用也可见。

关于全局小窗的拖拽。页面小窗其实改变的是Framelayout的窗口位置,而全局小窗改变的是AlertDialog的窗口位置。

有一点很重要,我们知道Android有一套触摸消息传递机制,默认情况下会先传递给子布局,如果消息没有被消费掉,再一层层往上传递。AlertDialog作为FrameLayout的父节点,要想优先消费触摸消息,必须进行消息拦截,要覆写dispatchTouchEvent方法:@Overridepublic booleandispatchTouchEvent(@NonNull MotionEvent ev) {returnonTouchEvent(ev);}

然后根据触摸坐标确定要移动到哪里,再通过WindowManager改变自己的位置:mWindowManager.updateViewLayout(getWindow().getDecorView(), layoutParams);

全屏

全屏时,同样是AutoMonitorPlayer将容器Framelayout删除出子节点,外部的根节点android.R.id.content再将容器FrameLayout加为子节点,同时,需要隐藏ActionBar、状态栏,并根据需要设置屏幕方向。

接口介绍

接口名参数说明

android实现多画面播放,可无缝切换小窗/全屏的android播放器实现相关推荐

  1. Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏)(可以作为遮罩来播放)

    目录 一.目的: 1.Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏),所以将其记录下来 二.参考: 1.[AS3编程教学]如何加载并 ...

  2. android webview 横竖屏_webview播放视频并且点击全屏横屏的方法

    title: webview播放视频并且点击全屏横屏的方法 date: 2016-11-28 10:33:27 tags: tips 首先initWebView,好吧有点多,有些是项目里其他需求需要的 ...

  3. 微信视频播放器隐藏播放控件,视频全屏做法分享

    转自:https://www.haorooms.com/post/weixin_hidevideo_control 本人实测有效.为了防止以后还要用到,到时候找不到,所以转载一下. 前言 平时项目中视 ...

  4. excel2016html,Excel2016中切换至全屏视图的两种方法

    在Excel工作表的使用过程中,有时因为工作表中的内容较多,无法在当前屏幕中完整显示,这时切换到全屏视图来查看要更方便一些.在Excel 2016中切换至全屏视图,主要有以下两种方法: 方法一:使用快 ...

  5. 在iframe 中视频可以正常播放,但是就是不能全屏。解决方法

    在iframe 中视频可以正常播放,但是就是不能全屏.解决方法 参考文章: (1)在iframe 中视频可以正常播放,但是就是不能全屏.解决方法 (2)https://www.cnblogs.com/ ...

  6. 安全牛课堂课程自动播放下一集以及全屏

    安全牛课堂课程自动播放下一集以及全屏 最近帮别人定制了一个TamperMonkey脚本.本身他想录制安全牛课堂的课程.所以需要视频可以自动播放下一集.同时为了为了效果更好,需要自动全屏播放.最后再脚本 ...

  7. Android手机循环切换图片全屏播放

    自己写的手机全屏切换播放图片,开发的是android4.3,运行测试的手机是Android5.1的,布局文件就不说了,就是一个ImageView,代码如下: import java.util.Time ...

  8. android 全屏动画,Android开发之全屏与非全屏的切换设置方法小结

    本文实例讲述了Android开发之全屏与非全屏的切换设置方法.分享给大家供大家参考,具体如下: 静态方法 1. 代码方式 在Activity类OnCreate方法中设置,代码如下 @Override ...

  9. html5仿抖音全屏播放,仿抖音视频全屏播放滑动切换

    1 前言 随着移动技术的快速迭代,数据流量费用的快速下降,视频.直播正成为全民的媒体盛宴,我司必然也不会缺席此次盛宴,这里讲述的是通过h5实现仿抖音视频全屏播放&滑动切换的效果,供我司直播鉴定 ...

最新文章

  1. 基于gateway网关实现限流
  2. 360安全路由器v2处理器_您的路由器有多不安全?
  3. 识别中文_中文场景文字识别大赛官方baseline
  4. 1000以内完数c语言程序_C语言完数编程题目详解
  5. docker构建自己的镜像
  6. 数学建模之微分方程模型详解
  7. CTF压缩包隐写类(zip、RAR、zip伪加密)
  8. create table
  9. GNU ARM 汇编基础笔记
  10. 中医针灸学综合练习题库【10】
  11. Todo Tree插件配置
  12. MATLAB toc使用
  13. 通过Flex布局设置水平垂直居中
  14. 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...
  15. 肥胖与高血压有什么关系?
  16. Android 文件系统获取root权限和重新挂载根目录为可读写
  17. Python画图常用代码总结,这20个画图代码现拿现用
  18. 解决Hexo博客引用网络图片无法显示的问题
  19. Python实现名片管理系统,办公必备!
  20. word敲空格文字不后退,用word来打文字的时候,为什么敲一下空格后面的文字就消失????...

热门文章

  1. linux 和windows 下golang安装
  2. php循环语句for while do while的用法
  3. 遇到的问题和解决方案
  4. codeforces 293E Close Vertices 点分治+滑窗+treap
  5. 4.0以后的新布局方式GridLayout
  6. java数组排序之冒泡排序
  7. BCompare注册文件+密钥被撤销解决方案
  8. Windows Server 2008 R2 SP1 安装NET FrameWork 4.0 受阻滞问题解决办法。
  9. Macbook外接显示器模糊解决方法
  10. Redis安装异常解决办法