转载请注明出处:https://blog.csdn.net/sunmmer123
Android实现一键开启自由窗口、分屏、画中画模式系列
通过前俩篇博文,我们学习了一些多窗口模式中的自由窗口模式与分屏模式的知识
最后,我们学习一下多窗口模式中的最后一个模式:画中画模式
画中画模式
Android 8.0(API 级别 26)允许以画中画 (PIP) 模式启动 Activity。 画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过固定到屏幕一角的小窗口观看视频,同时在应用之间进行导航或浏览主屏幕上的内容。
- 概念理解比较抽象,还是先看个效果图直观了解一下:
进入画中画模式后,窗口会显示在屏幕的最上层,位于系统选择的一角。可以随意拖动小画面窗口。当点按该窗口时,会看到两个控件:全屏切换开关(位于窗口的中心)和关闭按钮(右上角的“X”)。
1、如何切换至画中画模式
- 首先声明对画中画的支持,清单文件中对对应Activity设置android:supportsPictureInPicture为true
- 为了防止在画中画模式转换期间发生布局更改,设置一下android:configChanges属性
- 在点击按钮进入画中画模式之前,先判断下是否可以使用画中画模式,因为低内存设备可能无法使用画中画模式
- 点击按钮切换到画中画模式,要进入画中画模式,Activity 必须调用 enterPictureInPictureMode()
2、画中画模式的参数构建器介绍
画中画模式中,我们可通过它的参数构建器实现窗口宽高比例的设置以及添加窗口控件
- 创建画中画模式的参数构建器
- 设置宽高比例值,第一个参数表示分子,第二个参数表示分母
- setAspectRatio设置画中画窗口的宽高比例
- setActions设置控件
3、处理画中画模式下的界面元素
当 Activity 进入或退出画中画模式时,系统会调用 onPictureInPictureModeChanged(),可以在这个回调中做一些界面元素的交互处理
关于画中画模式就简单介绍到这里,具体的学习及玩法,可以参考开发文档:画中画支持
关于Android的多窗口模式就全部介绍完了,总结一下:
- 关于开启自由窗口/分屏模式的一个要点,就是要熟悉掌握一个栈知识点
- 关于自由模式里面窗口支持放大缩小以及移动位置,原理是不断的更改Task的边界(用Rect表示),然后根据Task的边界来重新缩放Task,从而达到窗口缩放和拖动的作用。
- 画中画模式分栈的核心工作是把Activity从id是FULLSCREEN_WORKSPACE_STACK_ID的栈移动到id是PINNED_STACK_ID的stack里面
这些底层实现原理,推荐这篇博客:Android多窗口框架全解析
源码后续会上传,如果有问题或者意见,欢迎评论区留言讨论!