android饺子播放器屏幕全屏,记录一次 学习饺子播放器切换全屏播放原理
学习的第一步就是先找到函数的入口:根据R.id.fullscreen这个全屏按钮的点击事件,我们很快就能定位到名叫gotoScreenFullscreen的函数。
code line 737
public void gotoScreenFullscreen() {
ViewGroup vg = (ViewGroup) getParent();
vg.removeView(this);
cloneAJzvd(vg);
CONTAINER_LIST.add(vg);//作者在这里保存了原视图的父布局
vg = (ViewGroup) (JZUtils.scanForActivity(getContext())).getWindow().getDecorView();//和他也没有关系
vg.addView(this, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
setScreenFullscreen();
JZUtils.hideStatusBar(getContext());
JZUtils.setRequestedOrientation(getContext(), FULLSCREEN_ORIENTATION);
JZUtils.hideSystemUI(getContext());//华为手机和有虚拟键的手机全屏时可隐藏虚拟键 issue:1326
}
从上方代码第三行跳转到下面这个方法,可以看出作者用构造器构造了一个新的对象替代了原来位置的对象。
public void cloneAJzvd(ViewGroup vg) {
try {
Constructor constructor = (Constructor) Jzvd.this.getClass().getConstructor(Context.class);
Jzvd jzvd = constructor.newInstance(getContext());
jzvd.setId(getId());
vg.addView(jzvd);
jzvd.setUp(jzDataSource.cloneMe(), SCREEN_NORMAL, mediaInterfaceClass);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
继续看第一个方法第四行开始,毫无疑问,作者获取getDecorView()根视图,然后将原来的对象放入了跟视图,同时隐藏了状态栏,也即是开启了全屏模式,汗,简单粗暴。
还不够,那如何从全屏模式回来呢,作者在打开全屏的时候,就将原视图的父容器存放到了一个链表中。
public static boolean backPress() {
Log.i(TAG, "backPress");
if (CONTAINER_LIST.size() != 0 && CURRENT_JZVD != null) {//判断条件,因为当前所有goBack都是回到普通窗口
CURRENT_JZVD.gotoScreenNormal();
return true;
} else if (CONTAINER_LIST.size() == 0 && CURRENT_JZVD != null && CURRENT_JZVD.screen != SCREEN_NORMAL) {//退出直接进入的全屏
CURRENT_JZVD.clearFloatScreen();
return true;
}
return false;
}
进入正题
public void gotoScreenNormal() {//goback本质上是goto
gobakFullscreenTime = System.currentTimeMillis();//退出全屏
ViewGroup vg = (ViewGroup) (JZUtils.scanForActivity(getContext())).getWindow().getDecorView();
vg.removeView(this);
CONTAINER_LIST.getLast().removeAllViews();
CONTAINER_LIST.getLast().addView(this, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
CONTAINER_LIST.pop();
setScreenNormal();//这块可以放到jzvd中
JZUtils.showStatusBar(getContext());
JZUtils.setRequestedOrientation(getContext(), NORMAL_ORIENTATION);
JZUtils.showSystemUI(getContext());
}
看完上面的代码一开始有点蒙蔽,为啥要把父容器的中视图全清理掉。回忆之前的接入过程,是因为
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/jz_video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
如上所示,作者一开始就要求为播放器增加一层嵌套,可能是为了图方便,毕竟这比从复杂布局中恢复容易的多。
至此了解饺子播放器全屏播放的原理了。
感想:我也想过做全屏播放,可从没想过这样来切换,我想的是构造新的SufaceView然后重新接入视屏播放的数据,把问题想复杂了,感谢大佬的代码让我豁然开朗。
android饺子播放器屏幕全屏,记录一次 学习饺子播放器切换全屏播放原理相关推荐
- android自适应屏幕翻转,Android中正确自适应屏幕翻转
大家都知道,很多Android手机带有重力感应传感器,能够对手机的翻转做出响应.比如应用在屏幕的自动翻转.重力感应游戏等方面. 只要在androidmanifest.xml中对应的Activity中加 ...
- MediaPlayer+TextureView,完美切换全屏、小窗口的 Android 视频播放器
NiceVieoPlayer 项目地址:xiaoyanger0825/NiceVieoPlayer 简介:MediaPlayer+TextureView,完美切换全屏.小窗口的 Android 视频 ...
- android 按键铺满屏幕,安卓全屏状态下键盘充满屏幕留不出ui控件的解决办法附edittext和键盘的属性...
1.我们先看看常用和不常用的属性值(Edittext) android:inputType参数类型说明 android:inputType="none"--输入普通字符 andro ...
- 自定义Android视频播放器 - 切换横竖屏
前一篇自定义了SurfaceView,然后尝试横屏显示,虽然视频适配方面没有问题,但是没有占满整个屏幕. 我分析了一下一般的视频播放器,发现: 竖屏播放视频,播放器的宽度占满手机屏幕的宽度,播放器的高 ...
- 播放器SkeyeWebPlayer多分屏(九宫格)、拖动(拖入分屏播放)、双击分屏放大缩小等功能的使用
免费视频直播.点播H5播放器SkeyeWebPlayer多屏(九宫格).双击分屏放大缩小.拖动(拖入分屏播放)等功能的使用. 1.SkeyeWebPlayer多屏(九宫格)布局切换,一般采用1.4.9 ...
- Android Video Player. 安卓视频播放器,封装 MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音,悬浮播放,广告播放,列表播放,弹幕
DKVideoPlayer 项目地址:dueeeke/DKVideoPlayer 简介: Android Video Player. 安卓视频播放器,封装 MediaPlayer.ExoPlayer. ...
- Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏)(可以作为遮罩来播放)
目录 一.目的: 1.Flash全屏播放外部多个Flv视频并且按键进行切换+全屏播放外部Flv视频+指定元件播放外部Flv视频(非全屏),所以将其记录下来 二.参考: 1.[AS3编程教学]如何加载并 ...
- android虚拟机固定横屏幕竖屏,用VBox虚拟机安装Android 屏幕90度翻转竖屏设置
在虚拟机中安装好Android之后,有一些Android应用(比如UC浏览器.UC桌面)不能安装.但更有一些程序是可以安装,却自动顺时间旋转了90度,操作和看起来非常不爽! 这个情况下,在Androi ...
- android横竖屏切换动画,Android应用怎么实现屏幕横竖屏切换功能
Android应用怎么实现屏幕横竖屏切换功能 发布时间:2020-11-26 15:48:57 来源:亿速云 阅读:121 作者:Leah Android应用怎么实现屏幕横竖屏切换功能?针对这个问题, ...
最新文章
- swift3.0三种反向传值
- mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁
- jquery 赋值时不触发change事件解决
- u8转完看不到菜单_web网页有错误,无法看到操作菜单-用友U8
- 如何运用大数据进行信贷审批?
- 为什么选择使用Sass而不是Less?
- mysql能将查询结果与表左查询,MySQL查询与结构
- 数据分析师系列课程 统计学基础1
- Flutter 性能优化
- ESP8266开启热点和TCP Server
- JWT原理 对比 appid secretkey 鉴权
- 苹果设备验证是否正品
- HTML之表单元素“Password”引发的思考-你的密码安全吗???
- 自己动手做Arduino玩具(三)
- 微信支付官方揭开刷脸支付神秘面纱
- 淘宝鹊桥计算工具安卓版小程序
- git pull 提示错误 fatal: refusing to merge unrelated histories
- 辽宁中职升高职计算机考试,2021年_辽宁省_中职升高职高考真题
- BUUCTF--[GWCTF 2019]枯燥的抽奖
- 【码蹄集新手村 600 题】判断输入的俩个正整数是否为蛮生质数(蛮生素数)
热门文章
- 树莓派将DHT11温度湿度上传到阿里云物联网平台
- 大学计算机基础知识点word,大学计算机基础考试知识重点
- 廖的python教程_廖雪峰的Python教程教程-02
- html桌球渐变色,用HTML 5打造斯诺克桌球俱乐部(2)
- 华为超级夜景是什么?P20手机怎么拍摄好看的超级夜景?
- 获取同花顺数据接口_如何获取深沪股票 LEVEL2 数据接口?
- 学计算机的看图写话,爸爸打电脑小明玩汽车看图写话一年级
- 公共基础知识:中国十大名关
- 蒸汽机器人布里茨天赋_lol机器人S6天赋加点图|2016赛季英雄联盟蒸汽机器人布里茨S6天赋、出装、符文加点最新全攻略_好特教程...
- 远航 Hello world.