画中画 (PiP) 是一种多窗口模式,旨在用于播放全屏视频的 activity。使用该模式,用户可以通过固定到屏幕一角的小窗口观看视频,同时在应用之间进行导航或浏览主屏幕上的内容。
要点总结
- 确保当 activity 处于画中画模式时,界面元素处于隐藏状态且视频能够继续播放。
- 为非视频内容停用无缝大小调整。
- 界面极简的视频播放 activity 可提供出色的用户体验。
- 避免显示视频内容以外的任何内容。
为应用添加画中画支持
默认情况下,系统不会自动为应用提供画中画支持,需要声明支持此功能。
画中画窗口会显示在屏幕的最上层,位于系统选择的一角。
控件
默认情况下,Android 提供用于关闭窗口、将其展开回全屏模式、进行设置和播放媒体的画中画控件。您的应用可以添加自定义操作和相应的图标资源,以便用户与 PiP 内容互动。
用户可以通过以下方式从画中画窗口菜单中显示这些控件:在移动设备上点按窗口,或使用电视遥控器选择菜单。如果应用有处于活跃状态的媒体会话,则还会显示“播放”“暂停”“下一个”和“上一个”控件。了解如何添加这些控制措施。
在画中画模式下,您的 activity 会在一个小窗口中显示。在此模式下,用户无法与应用的其他界面元素互动,并且可能很难看清画中画窗口中的小界面元素的详细信息。

默认的 PiP 控制。

自定义 PiP 控制示例。
用法
允许用户不仅在您的应用中继续观看视频,还可以在其设备上继续观看。您的应用会控制当前 activity 在何时进入画中画模式,这可以是离开当前视图或向上滑动以返回主屏幕等互动。
以下是一些可能的操作示例:
当用户点按主屏幕按钮或向上滑动到主屏幕时,activity 可以进入画中画模式。Google 地图就是通过这种方式,在用户同时运行其他 activity 时继续显示路线。
图 4:使用 PiP 继续路线规划体验 您的应用可以在用户从某个视频返回以浏览其他内容时,将该视频切换到画中画模式。
您的应用可以在用户观看到某集内容结束时,将视频切换到画中画模式。主屏幕会显示有关这部电视剧下一集的宣传信息或剧情摘要信息。
您的应用可以提供一种方式,让用户可以在观看视频时将其他内容加入播放队列。当主屏幕显示内容选择 activity 时,视频会继续以画中画模式播放。
使用可提升观看体验且不会造成干扰的互动模式。例如,如果视频位于内容剧集的末尾,那么在离开主屏幕时进入画中画模式将需要用户执行额外的操作才能返回并停止播放或浏览小控件。
在您的应用中,用户可能会在主屏幕上浏览内容时选择新的视频,同时还有一个视频播放 activity 正处于画中画模式。应以全屏模式在现有的播放 activity 中播放新的视频,而不是启动可能会令用户感到困惑的新 activity。
互动模式
用户可以将画中画窗口拖动到其他位置。
点按一次该窗口可显示全屏切换开关、关闭按钮、设置按钮以及应用提供的自定义操作(例如播放控件)。
点按两次窗口可在当前画中画大小与最大或最小画中画大小之间切换。例如,点按两次最大化的窗口可将其最小化,反之亦然。
将窗口拖到左侧或右侧边缘可隐藏该窗口。如需取消隐藏窗口,请点按已隐藏窗口的可见部分或将其拖出。
使用“双指张合即可缩放”手势调整画中画窗口的大小。
向下滑动 PIP 即可移除窗口。
转场效果
为了在进入和退出画中画模式时提供流畅的用户体验,请自定义进入和退出过渡效果。
流畅的进入画中画动画
当用户触发画中画模式时,当前 activity 会从全屏缩小为一个小窗口,该窗口会继续显示内容,而不会叠加任何界面。
Android 12 对全屏窗口与画中画窗口之间的过渡进行了外观改进。实现这些更新后,它们会自动扩展到平板电脑和可折叠设备。
如果不进行这些更新,过渡效果虽然能正常运行,但不够完善。例如,在过渡期间,画中画窗口可能会暂时消失。
从 Android 12 开始,PictureInPictureParams.Builder.setAutoEnterEnabled(true) 标志可提供更流畅的手势过渡效果(例如向上滑动返回主屏幕)。我们建议您为 ENTERTAINMENT、COMMUNICATION 或 VIDEO_PLAYER 应用执行此操作。
如果没有此标志,手势过渡会将窗口缩小为应用图标,然后再重新显示为画中画窗口(如视频 1 所示)。
当 PiP 未正确实现 setAutoEnterEnabled 时,过渡体验不够顺畅
为应用添加了 setAutoEnterEnabled,使过渡体验更加流畅。
流畅的视频画面
在 Android 8.0 中引入画中画时,sourceRectHint 表示在过渡到画中画模式后 activity 的可见区域,例如视频播放器中的视频视图边界。从 Android 12 开始,操作系统使用 sourceRectHint 在进入和退出画中画模式时实现更流畅的动画。
如果您的应用未提供合适的 sourceRectHint,PiP 过渡仍可正常运行,但动画效果不太理想。例如,视频 3 展示了一个从全屏模式过渡到画中画模式的粗略示例:全屏窗口缩小为画中画窗口后,在再次显示视频之前,会被黑色叠加层覆盖。
sourceRectHint 时,过渡体验不够流畅如需查看正确实现 sourceRectHint 后画中画动画的显示效果,请参阅上一部分中的视频 2。
如需了解如何实现流畅的过渡体验,请参阅 Android Kotlin PictureInPicture 示例。
如需详细了解如何实现画中画,请参阅画中画开发者文档。