竞品技术调研:小米自由窗口Freeform实现方案剖析
文章目录背景自由窗口实现功能和技术原理剖析小米自由窗口为啥比原生体验好自由窗口整体结构剖析放大进入全屏的功能退出自由窗口的相关交互方式拖动自由窗口最右侧交互最小化功能背景国内这些手机大厂在自由窗口这块的功能其实都做得比较好也一直是一个相比aosp原生修改差异较大的功能也属于一个非常大的亮点提升代表厂商比如常见的小米ov等。小米自由窗口展示如下而且国内这些手机厂商在自由窗口这块额外加入的功能还比较多所以今天针对小米手机做一个关于自由窗口的调研报告方便各位vip课程群里的学员朋友进行自由窗口开发时候有个比较好的参考更多关于手机大厂自由窗口功能讨论可以联系马哥交流或者获取额外vip资料如果有的话会分享相关学员。自由窗口实现功能和技术原理剖析小米自由窗口为啥比原生体验好对比原生的自由窗口展示样子小米的自由窗口样式上就好看很多这块也是自由窗口最核心的优化部分那么小米是怎么实现这个自由窗口的美化呢其实这块和马哥自由窗口课程中实战讲解的原理一样具体可以通过dumpsys验证他的原理dumpsys activity containers│ └─ DefaultTaskDisplayAreatypeundefinedmodefullscreen override-modefullscreen requested-bounds[0,0][0,0]bounds[0,0][1220,2712]│ ├─Task6311typestandardmodeFREEFORM override-modeFREEFORM requested-bounds[183,295][1403,2247]bounds[183,295][1403,2247]│ │ └─ ActivityRecord{242935665u0 com.android.mms/.ui.MmsTabActivity t6311}typestandardmodeFREEFORM override-modeundefined requested-bounds[0,0][0,0]bounds[183,295][1403,2247]│ │ └─ ed49369 com.android.mms/com.android.mms.ui.MmsTabActivitytypestandardmodeFREEFORM override-modeundefined requested-bounds[0,0][0,0]bounds[183,295][1403,2247]│ ├─Task1typeHOMEmodefullscreen override-modeundefined requested-bounds[0,0][0,0]bounds[0,0][1220,2712]│ │ └─Task2typeHOMEmodefullscreen override-modeundefined requested-bounds[0,0][0,0]bounds[0,0][1220,2712]│ │ └─ ActivityRecord{247813959u0 com.miui.home/.launcher.Launcher t2}typeHOMEmodefullscreen override-modeundefined requested-bounds[0,0][0,0]bounds[0,0][1220,2712]│ │ ├─ 5db03ab LauncherOverlayWindow:com.miui.personalassistanttypeHOMEmodefullscreen override-modeundefined requested-bounds[0,0][0,0]bounds[0,0][1220,2712]│ │ └─ 37aaaf2 com.miui.home/com.miui.home.launcher.LaunchertypeHOMEmodefullscreen override-modeundefined requested-bounds[0,0][0,0]bounds[0,0][1220,2712]可以看出com.android.mms/.ui.MmsTabActivity短信这个activity实际是modeFREEFORM的情况。但是bounds大小是requested-bounds[183,295][1403,2247]bounds[183,295][1403,2247]而且看看窗口大小的boundsWindow#14 Window{ed49369 u0 com.android.mms/com.android.mms.ui.MmsTabActivity}://省略 Requestedw1220h1952mLayoutSeq117692但是明显这窗口大小是大于自由窗口展示的因为w1220实际是全屏幕的宽度所以这里其实有对图层进行缩放所以这块其实本质原理和课程一模一样。自由窗口整体结构剖析除了自由窗口窗口的本身Task图层外小米还设计了上下Caption Bar进行dumpsys sf后得出如下图层情况Display4630946370515662722(active)HWC layers: --------------------------------------------------------------------------------------------------------------------------------------------------------------- Layer name Z|Window Type|Layer Class|Comp Type|Transform|Disp Frame(LTRB)|Source Crop(LTRB)|Frame Rate(Explicit)(Seamlessness)[Focused]--------------------------------------------------------------------------------------------------------------------------------------------------------------- Wallpaper BBQ wrapper#621|0|0|DEVICE|0|0012202712|0.00.01220.02712.0|[]--------------------------------------------------------------------------------------------------------------------------------------------------------------- com.miui.home/com.miui.home.launcher.Launcher#930283|1|0|DEVICE|0|0012202712|0.00.01220.02712.0|[]---------------------------------------------------------------------------------------------------------------------------------------------------------------Task6181#6797111|0|0|CLIENT|0|04611431682|0.00.00.00.0|[]--------------------------------------------------------------------------------------------------------------------------------------------------------------- com.android.mms/com.android.mms.ui.MmsTabActivity#9306713|1|0|CLIENT|0|1832958941433|0.00.01220.01952.0|[*]--------------------------------------------------------------------------------------------------------------------------------------------------------------- Miui Caption ofTask6181#9307514|0|0|CLIENT|0|509321569333|0.00.060.012.0|[]--------------------------------------------------------------------------------------------------------------------------------------------------------------- Miui Bottom Caption ofTask6181#9307715|0|0|CLIENT|0|45014076271419|0.00.0305.012.0|[]--------------------------------------------------------------------------------------------------------------------------------------------------------------- StatusBar#12119|2000|0|DEVICE|0|001220122|0.00.01220.0122.0|[]--------------------------------------------------------------------------------------------------------------------------------------------------------------- NavigationBar0#12020|2019|0|DEVICE|0|0266412202712|0.00.01220.048.0|[]---------------------------------------------------------------------------------------------------------------------------------------------------------------可以看出上面图层中没有看到有拖拽过程展示的提示圆角这块预计是在sf中的skia绘制的。放大进入全屏的功能这里在自由窗口进行拖动放到时候会检测是否到了阈值一旦到了阈值后自由窗口显示变成一个图标还会展示一个提升圆角背景。退出自由窗口的相关交互方式最小化退出方式缩放到最小退出方式拖动自由窗口最右侧交互最小化功能在自由窗口展示时候整体拖动自由窗口到屏幕最右侧既可以展示一个自由窗口app的一个图标这个图标一般只有一半内容展示在屏幕内。可以看看这个屏幕侧边的图标图层它实际是MiuiBubbles图层实际这个图层处于顶层由systemui进程创建而且他的展示大小还是w1220 h2712相关window信息如下Window#1 Window{9274ecc u0 MiuiBubbles}:mDisplayId0mSessionSession{38089254456:1000}mClientandroid.os.BinderProxydddc59mOwnerUid1000showForAllUserstruepackagecom.android.systemuiappopNONEmAttrs{(0,0)(fillxfill)grTOP CENTER_VERTICALsim{adjustresize}layoutInDisplayCutoutModealways pkgcom.android.systemui adpkgnulltyMAGNIFICATION_OVERLAYfmtTRANSLUCENTflNOT_FOCUSABLE NOT_TOUCH_MODAL HARDWARE_ACCELERATEDpflSHOW_FOR_ALL_USERS FIT_INSETS_CONTROLLED TRUSTED_OVERLAYbhvDEFAULTframeRateBoostOnTouchtruedvrrWindowFrameRateHinttrue}Requestedw1220h2712mLayoutSeq118110mBaseLayer281000mSubLayer0mTokenWindowToken{d70201etype2027android.os.BinderProxy79648a0}-topChildWindow{9274ecc u0 MiuiBubbles}mViewVisibility0x0mHaveFrametruemObscuredfalsemGivenContentInsets[0,0][0,0]mGivenVisibleInsets[0,0][0,0]mTouchableInsets3mGivenInsetsPendingfalse touchableregionSkRegion((1148,656,1340,848))可以看到这个图层显示大小是 w1220 h2712 但是它大部分区域都是透明的只有在SkRegion((1148,656,1340,848))这个区域是显示的而且可以触摸的。点击最右侧这个图标可以既可以进入自由窗口尺寸最小的原文地址https://mp.weixin.qq.com/s/xOR3YcPrKbS_rhmDoiRmOQ

相关新闻

WindowResizer:快速掌握窗口强制调整的完整指南

WindowResizer:快速掌握窗口强制调整的完整指南

WindowResizer:快速掌握窗口强制调整的完整指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些"顽固"的Windows窗口而烦恼吗?WindowR…

2026/7/30 18:34:20阅读更多 →
如何5分钟完成智能配置:OpenCore EFI自动化工具的终极指南

如何5分钟完成智能配置:OpenCore EFI自动化工具的终极指南

如何5分钟完成智能配置:OpenCore EFI自动化工具的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想在PC上安装macOS却对复杂的Op…

2026/7/30 18:34:20阅读更多 →
栈和队列应用

栈和队列应用

一、栈1.限制线性表(数组链表)的插入和删除,插入删除在同一端进行,不考虑查找只考虑插入删除用栈2.先进后出package com.qcby.db;public class Stack {private int[] arr new int[5];private int top -1;//栈满,顶端…

2026/7/30 18:34:20阅读更多 →
3个技巧让gpt-fast成为你的PyTorch原生文本生成加速器

3个技巧让gpt-fast成为你的PyTorch原生文本生成加速器

3个技巧让gpt-fast成为你的PyTorch原生文本生成加速器 【免费下载链接】gpt-fast Simple and efficient pytorch-native transformer text generation in <1000 LOC of python. 项目地址: https://gitcode.com/gh_mirrors/gp/gpt-fast 想要在PyTorch原生环境中实现超…

2026/7/30 19:52:42阅读更多 →
单片机毕设项目:基于阈值自定义的心率血氧监测预警装置开发 基于 STM32 的便携式健康监测硬件终端设计(013201)

单片机毕设项目:基于阈值自定义的心率血氧监测预警装置开发 基于 STM32 的便携式健康监测硬件终端设计(013201)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

2026/7/30 19:52:42阅读更多 →
Steam成就管理器完整指南:专业成就管理工具深度解析

Steam成就管理器完整指南:专业成就管理工具深度解析

Steam成就管理器完整指南&#xff1a;专业成就管理工具深度解析 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager Steam成就管理器&#xff08;Steam Achiev…

2026/7/30 19:52:42阅读更多 →
从裸机到生命游戏:Mu项目如何让你重新理解计算机编程

从裸机到生命游戏:Mu项目如何让你重新理解计算机编程

从裸机到生命游戏&#xff1a;Mu项目如何让你重新理解计算机编程 【免费下载链接】mu Soul of a tiny new machine. More thorough tests → More comprehensible and rewrite-friendly software → More resilient society. 项目地址: https://gitcode.com/gh_mirrors/mu2/m…

2026/7/30 19:52:42阅读更多 →
单片机毕设项目:基于 STM32 的多按键可调智能垃圾桶设计 基于超声波感应的垃圾桶自动启闭装置设计(013101)

单片机毕设项目:基于 STM32 的多按键可调智能垃圾桶设计 基于超声波感应的垃圾桶自动启闭装置设计(013101)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

2026/7/30 19:52:42阅读更多 →
基于vis-three的Web3D场景编辑器架构解析:如何构建专业级三维交互应用

基于vis-three的Web3D场景编辑器架构解析:如何构建专业级三维交互应用

基于vis-three的Web3D场景编辑器架构解析&#xff1a;如何构建专业级三维交互应用 【免费下载链接】scene-editor vis-three框架衍生出的全自定义web3D场景编辑器 项目地址: https://gitcode.com/GitHub_Trending/sc/scene-editor scene-editor作为vis-three框架衍生的全…

2026/7/30 19:50:42阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

&#x1f539; 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具&#xff0c;凭借本地离线运行、可视化图形操作和任务自动化三大核心特性&#xff0c;赢得了众多用户的青睐。与普通在线对话AI工具不同&#xff0c;它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接&#xff0c;是用激光束对阀座壳体&#xff08;通常为不锈钢或铝合金&#xff09;进行密封焊接&#xff0c;使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX&#xff1a;三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由&#xff1a;TrollInstallerX让你的iPhone摆脱安装限制 &#x1f680; 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会&#xff08;CCF&#xff09;2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具&#xff1a;DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼&#xff1f;是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →