画中画

画中画 (PiP) 是一种多窗口模式,适用于播放全屏视频的活动。它允许用户在一个固定在屏幕角落的小窗口中观看视频,同时在应用之间导航或浏览主屏幕上的内容。

图 1:即使不在您的应用中,用户也可以继续观看视频

要点

  • 确保活动处于 PiP 模式时隐藏 UI 元素并继续播放视频。
  • 禁用非视频内容的无缝调整大小。
  • 具有最少 UI 的视频播放活动可提供最佳用户体验。
  • 避免显示除视频内容以外的任何内容。

为您的应用添加画中画支持

默认情况下,系统不会自动为应用支持 PiP,需要声明以支持此功能。

PiP 窗口出现在屏幕的最顶层,位于系统选择的角落。

控件

默认情况下,Android 提供了用于关闭窗口、将其扩展回全屏、设置和媒体播放的 PiP 控件。您的应用可以添加自定义操作和相应的图标资源,以允许用户与 PiP 内容进行交互。

用户可以通过点击移动设备上的窗口或从电视遥控器中选择菜单来从 PiP 窗口菜单显示这些控件。如果应用具有活动的媒体会话,则还会显示播放、暂停、下一首和上一首的控件。阅读有关如何添加这些控件

在 PiP 模式下,您的活动显示在一个小窗口中。用户在此模式下无法与应用的其他 UI 元素进行交互,并且 PiP 窗口中小 UI 元素的细节可能难以查看。

图 2:默认 PiP 控件


图 3:自定义 PiP 控件示例

过渡

流畅的进入 PiP 动画

用户触发 PiP 模式会导致当前活动从全屏缩小到一个小窗口,该窗口会继续显示内容,而不会覆盖任何 UI。

Android 12 对全屏和 PiP 窗口之间的动画过渡进行了重大视觉改进。我们强烈建议实施所有适用的更改;完成此操作后,这些更改会自动扩展到大型屏幕(例如折叠式手机和平板电脑),无需任何其他工作。

如果您的应用不包含这些适用的更新,PiP 过渡仍然可以使用,但动画效果较差。例如,从全屏过渡到 PiP 模式可能会导致 PiP 窗口在过渡期间消失,然后在过渡完成后重新出现。

从 Android 12 开始,PictureInPictureParams.Builder.setAutoEnterEnabled(true) 标志为使用手势导航(例如,从全屏向上滑动到主屏幕)过渡到 PiP 模式中的视频内容提供了更流畅的动画。如果您的应用属于ENTERTAINMENTCOMMUNICATIONVIDEO_PLAYER 应用类别,我们建议您这样做。

如果您的应用不包含此更改,则使用手势导航的 PiP 过渡仍然可以使用,但动画效果较差。视频 1 显示了此示例:窗口缩小到应用图标并消失,然后在过渡完成后重新出现。

视频 1:PiP 未正确实施setAutoEnterEnabled 时的动画效果较差

视频 2 显示了相同的过渡示例,但添加了setAutoEnterEnabled 到应用中。

视频 2:流畅的过渡体验

流畅的视频画面

当我们在 Android 8.0 中引入 PiP 时,sourceRectHint 指示了在过渡到 PiP 后可见的活动区域——例如,视频播放器中的视频视图边界。从 Android 12 开始,操作系统使用sourceRectHint 来实现更流畅的进入和退出 PiP 模式的动画。

如果您的应用没有提供合适的sourceRectHint,PiP 过渡仍然可以使用,但动画效果较差。例如,视频 3 显示了从全屏到 PiP 模式的动画效果较差的示例:全屏窗口缩小到 PiP 窗口后,会被黑色覆盖层覆盖,然后再显示视频。

视频 3:PiP 未正确实施sourceRectHint 时的动画效果较差

要查看sourceRectHint 正确实施时 PiP 动画的外观示例,请参阅上一节中的视频 2。

请参考Android Kotlin 画中画示例,了解如何实现流畅的过渡体验。

用法

允许用户不仅在您的应用内继续观看视频,而且可以在其设备上继续观看。您的应用控制当前活动何时进入 PiP 模式——这可以是离开当前视图或向上滑动以返回主屏幕之类的交互。

以下是一些可能的动作示例

  • 当用户点击Home键或向上滑动至Home界面时,活动可以进入画中画 (PiP) 模式。例如,Google 地图就可以在用户同时运行其他活动时继续显示路线指引。

    图4:使用 PiP 继续导航体验
  • 当用户从视频返回浏览其他内容时,你的应用可以将视频切换到 PiP 模式。

  • 当用户观看节目的结尾时,你的应用可以将视频切换到 PiP 模式。主屏幕会显示该系列剧集下一集的宣传或摘要信息。

  • 你的应用可以为用户提供在观看视频的同时排队添加更多内容的方式。视频在 PiP 模式下继续播放,而主屏幕则显示内容选择活动。

使用一种互补观看体验且不会造成干扰的交互模式。例如,如果视频处于节目的结尾,则在离开主屏幕时进入 PiP 模式需要用户额外操作才能返回并停止播放或操作小控件。

在你的应用中,用户可能在主屏幕上浏览内容时选择一个新视频,而视频播放活动处于 PiP 模式。在新视频播放时,请在现有的播放活动中以全屏模式播放,而不是启动一个可能让用户感到困惑的新活动。

用户可以将 PiP 窗口拖动到另一个位置。

  • 单击窗口以显示全屏切换按钮、关闭按钮、设置按钮以及你的应用提供的自定义操作(例如,播放控件)。

    图5:默认 PiP 控件
  • 双击窗口可在当前 PiP 大小和最大或最小 PiP 大小之间切换——例如,双击最大化窗口会将其最小化,反之亦然。

    图6:双击在最小和最大尺寸 PiP 之间切换
  • 通过将其拖动到左侧或右侧边缘来隐藏窗口。要取消隐藏窗口,请点击隐藏窗口的可见部分或将其拖出。

    图7:隐藏的 PiP
  • 使用捏合缩放来调整 PiP 窗口大小。

  • 向下滑动 PiP 以移除窗口。

    图8:向下滑动

有关实施 PiP 的更多信息,请参阅 画中画开发者文档