HarmonyOS7 VideoPictureInPicture 教程:画中画模式为什么特别适合边看边做事
文章目录前言这份案例在演示什么完整代码为什么 pipEnabled 代表的是一种任务模式切换为什么主视频区和小窗要同时出现小窗为什么适合用 Stack 做示意说明区里的权限信息为什么不能忽略.pictureInPicture(true/false) 背后代表什么关键代码单独讲解Button(this.pipEnabled ? 关闭画中画 : 开启画中画).position({ top: 8, right: 8 }).onClick(() { this.pipEnabled false })小白最容易踩的坑1. 把画中画理解成普通弹层2. 只做了小窗样式没有想清楚主页面离开后的播放逻辑3. 忽略权限配置这份代码能怎么改成真实业务动手改一改写在最后前言很多视频能力都在提升“观看体验”但画中画不太一样。它提升的是任务切换体验。用户不一定总是愿意停留在播放器页里。看教程时可能想去记笔记看会议回放时可能要顺手回消息看课程时可能想一边查资料一边继续听。这时候如果视频一离开当前页面就中断体验会立刻打折。这也是为什么画中画能力很有价值。它让播放不再被页面边界锁死。这份案例在演示什么页面核心围绕一个状态StatepipEnabled:booleanfalse它控制播放器是否进入画中画概念模式。案例做了两件事展示主视频区域在开启时叠加一个小窗播放器示意这正好对应了画中画的核心认知主内容可以让位但播放不必停止。完整代码/** * VideoPictureInPicture - Video 画中画 * 演示 Video 画中画模式的概念和实现方式 */import{PRESET_COLORS,generateListItems,PAGE_BG_COLOR,PANEL_BG_COLOR,ACCENT_COLOR,MUTED_TEXT_COLOR}from./typesEntryComponentstruct VideoPictureInPicture{StateisShow:booleantrueStatepipEnabled:booleanfalsebuild(){Column(){if(this.isShow){Scroll(){Column({space:16}){Text(Video 画中画).fontSize(16).fontColor(ACCENT_COLOR).fontWeight(FontWeight.Bold)Column(){Row(){Text(画中画: ).fontSize(13).fontColor(#666666)Text(this.pipEnabled?已开启:未开启).fontSize(14).fontColor(this.pipEnabled?#6BCB77:#A0A0A0).fontWeight(FontWeight.Bold)}.margin({bottom:12})Column(){Column(){Text(主视频区域).fontSize(14).fontColor(#FFFFFF)}.width(100%).height(160).backgroundColor(#444444).borderRadius(10).justifyContent(FlexAlign.Center)if(this.pipEnabled){Stack(){Column(){Text(PiP).fontSize(10).fontColor(#FFFFFF)}.width(100).height(60).backgroundColor(#4D96FF).borderRadius(6).justifyContent(FlexAlign.Center)Text(×).fontSize(12).fontColor(#FFFFFF).width(20).height(20).backgroundColor(#FF6B6B).borderRadius(10).textAlign(TextAlign.Center).position({top:-5,right:-5})}.position({top:8,right:8}).onClick((){this.pipEnabledfalse})}}.width(100%).height(160)Button(this.pipEnabled?关闭画中画:开启画中画).onClick((){this.pipEnabled!this.pipEnabled}).fontSize(13).backgroundColor(this.pipEnabled?#FF6B6B:ACCENT_COLOR).margin({top:10})}.backgroundColor(PANEL_BG_COLOR).padding(12).borderRadius(12)Column({space:6}){Text(画中画功能说明).fontSize(14).fontColor(ACCENT_COLOR).fontWeight(FontWeight.Bold)Text(Video 组件支持 pictureInPicture 模式).fontSize(12).fontColor(#333333)Text(开启后播放器以小窗悬浮在其他应用上).fontSize(12).fontColor(#333333)Text(用户可拖动小窗位置、调节大小).fontSize(12).fontColor(#333333)Text(切换应用时视频不中断播放).fontSize(12).fontColor(#333333)Text(API: .pictureInPicture(true/false)).fontSize(12).fontColor(#333333)Text(需在 module.json5 中配置 PiP 权限).fontSize(12).fontColor(#333333)Text(ohos.permission.PICTURE_IN_PICTURE).fontSize(11).fontColor(MUTED_TEXT_COLOR)}.width(100%).backgroundColor(#E8F4FD).padding(14).borderRadius(12)}.width(100%)}}Text(Video 画中画 - 保持播放连续性的悬浮小窗模式).fontSize(12).fontColor(MUTED_TEXT_COLOR).margin({top:12})}.width(100%).height(100%).backgroundColor(PAGE_BG_COLOR).padding(16)}}为什么pipEnabled代表的是一种任务模式切换先看这行StatepipEnabled:booleanfalse它并不只是控制一个小窗显示不显示而是在表达播放器是否进入“边播放边切任务”的模式。这和全屏完全不同。全屏强调沉浸画中画强调不中断所以它们虽然都属于视频高级能力但服务的用户场景完全不一样。为什么主视频区和小窗要同时出现案例故意把两者放在一个结构里是为了帮助你建立概念主视频区代表内容原本所在的位置小窗代表播放能力被抽离出来变成一个独立悬浮入口你可以把画中画理解成“播放器脱离页面容器继续存在”。小窗为什么适合用Stack做示意看这段Stack(){小窗主体 关闭按钮}这很符合真实 PiP 的交互模型。一个小窗本体上面往往还会附着关闭按钮暂停按钮恢复到主页面的入口这类覆盖式控件结构用Stack特别自然。说明区里的权限信息为什么不能忽略案例最后明确写了ohos.permission.PICTURE_IN_PICTURE这点非常重要。因为画中画不是纯前端视觉效果它往往涉及系统级能力和权限配置。也就是说真正要落地 PiP除了页面状态和组件调用外你还得关心权限声明系统支持情况生命周期处理小窗切换时的播放器状态同步.pictureInPicture(true/false)背后代表什么这行 API 方向.pictureInPicture(true/false)其实是在告诉你画中画能力最终并不是靠“自己画个悬浮框”来实现而是要借助系统提供的 PiP 模式。教学案例先用状态和布局帮你理解概念再对接真实 API这个顺序是合理的。关键代码单独讲解Button(this.pipEnabled ? 关闭画中画 : 开启画中画)按钮文案跟当前状态绑定能让用户马上知道下一次点击会触发什么。.position({ top: 8, right: 8 })小窗放在右上角是一种很常见的浮层示意位置也方便和主画面形成明显区分。.onClick(() { this.pipEnabled false })小窗本身提供退出入口这是 PiP 体验里很重要的一点。小白最容易踩的坑1. 把画中画理解成普通弹层其实它更接近系统级播放延续能力。2. 只做了小窗样式没有想清楚主页面离开后的播放逻辑这样做出来的只是视觉模拟不是完整体验。3. 忽略权限配置页面代码写完了但运行时根本进不了 PiP 模式。这份代码能怎么改成真实业务场景改法在线课程页支持边看课程边记笔记会议回放页用户切到聊天或文档时继续听回放直播回放页允许用户边浏览其他内容边保留播放教程应用小窗播放时提供恢复到详情页入口动手改一改给小窗再补一个“返回主播放器”按钮。进入画中画后隐藏主页面里不必要的播放控制区。记录进入和退出 PiP 的状态变化。在真实项目里补上module.json5的权限配置。写在最后画中画模式最有价值的地方不是界面看起来高级而是它把播放从“页面功能”升级成了“跨页面连续能力”。这一步一旦做好视频体验会立刻显得成熟很多。如果你现在在做 HarmonyOS7 的媒体应用这篇建议认真消化。因为它让你开始从页面视角之外去理解播放器和系统能力之间的关系。

相关新闻

中金:基于Loop Engineering的自动化因子发现引擎

中金:基于Loop Engineering的自动化因子发现引擎

Loop挖掘因子新框架 系统基于Loop engineering框架构建主要由loop命令承担定时调度,每5分钟触发一轮因子发现迭代;检查点文件记录已测试因子的哈希集合、入库因子的完整信息与迭代计数,任意时点中断均可从断点续跑,已完成的进度不…

2026/8/10 9:44:16 阅读更多 →
马鞍山建设银行网站如何助力您的财富增长与生活服务指南

马鞍山建设银行网站如何助力您的财富增长与生活服务指南

在如今这个信息爆炸、节奏飞快的时代,我们每个人都像是一个忙碌的陀螺,从清晨的第一缕阳光洒进窗台开始,直到深夜疲惫地关上家门,生活仿佛被按下了快进键。在这匆匆忙忙的日子里,钱袋子似乎永远是大家最关心的话题之一。以前,存钱取钱得特意挑个不忙的周末,穿上得体的衣…

2026/8/8 4:24:22 阅读更多 →
云原生安全防护体系构建与实践指南

云原生安全防护体系构建与实践指南

1. 云端安全防护的现状与挑战上周处理了一起客户数据泄露事件,攻击者通过一个未被及时修复的云存储桶配置漏洞,窃取了近10万条用户信息。这已经是今年遇到的第7起类似案例,暴露出企业在云端防护上的普遍短板。当前企业上云率已超过80%&#x…

2026/8/10 7:29:09 阅读更多 →

最新新闻

AI时代最贵的不是算力,不是数据,不是模型——是知道“什么是对的“这件事本身

AI时代最贵的不是算力,不是数据,不是模型——是知道“什么是对的“这件事本身

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 让我们静下心来审视一下自己,是不是忙得有价值,忙得有意义,忙得有目的,看一看我们是不是因为忙而迷失了自己。如果我们仅是为了忙而忙,那不妨让…

2026/8/10 9:45:18 阅读更多 →
电子鼻数据PCA分析全流程:从Python处理到Origin可视化

电子鼻数据PCA分析全流程:从Python处理到Origin可视化

电子鼻作为一种模拟生物嗅觉系统的传感器阵列,通常用于检测和识别复杂气体混合物。其产生的数据往往是高维的,包含多个传感器对不同气体的响应值。直接分析这些原始数据不仅困难,而且难以直观地揭示样本间的差异和潜在规律。因此,…

2026/8/10 9:45:18 阅读更多 →
Python异常处理模板:提升代码健壮性与可维护性

Python异常处理模板:提升代码健壮性与可维护性

1. 模板代码异常处理的核心价值第一次接手老项目时,我盯着满屏的try...except陷入了沉思——这些重复的异常处理代码不仅让核心业务逻辑变得支离破碎,更可怕的是它们隐藏着严重的隐患。模板代码异常处理正是为了解决这种困境而生的工程实践。在Python等动…

2026/8/10 9:45:18 阅读更多 →
Nginx安全加固实战:禁用TLS 1.0/1.1协议与配置优化指南

Nginx安全加固实战:禁用TLS 1.0/1.1协议与配置优化指南

1. 项目概述:为什么你的Nginx服务器还在“裸奔”? 如果你还在用Nginx默认的SSL/TLS配置,那你的服务器可能正处在一种“裸奔”状态。我说的“裸奔”,不是指没开HTTPS,而是指你虽然启用了加密,但用的却是老旧…

2026/8/10 9:45:18 阅读更多 →
OpenAI Codex安全审查:AI驱动的代码漏洞检测与GitHub集成实战

OpenAI Codex安全审查:AI驱动的代码漏洞检测与GitHub集成实战

在代码审查环节,开发者们常常面临一个两难困境:人工审查耗时耗力,容易遗漏细节;而传统的自动化工具又往往只能检查语法和简单的代码风格,对于更深层的逻辑漏洞、安全风险、性能瓶颈以及API误用等问题,常常力…

2026/8/10 9:45:18 阅读更多 →
DeepSeek    LeetCode 3855. 给定范围内 K 位数字之和 Rust实现

DeepSeek LeetCode 3855. 给定范围内 K 位数字之和 Rust实现

解题思路核心在于逐位独立计算贡献:每个数位上的数字都独立地从 [l, r] 中选取。 总数字个数:共有 n r - l 1 个可选数字,因此 k 位数字的总数为 n^k。单个数位贡献:固定一个数位,其余 k-1 位可任意选择&#xff0…

2026/8/10 9:44:17 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →