aosp13/14上自由窗口实战开发之CaptionWindow原理差异分析

鸿蒙API13开发【窗口开发概述】ArkUI开发 窗口模块用于在同一块物理屏幕上,提供多个应用界面显示、交互的机制。 阅读详情

背景:

近来有学员朋友在做自由窗口升级aosp14时候,虽然马哥已经给大家提供了aosp14的适配patch,但是那个值实现了基本功能,没有和aosp13那么全面,发现自由窗口的顶部操作栏这部分内容和以前aosp13有较大的差异,于是和马哥这边进行了相关的讨论交流,确实发现这块差异比aosp13大了不少,这里进行一下相关记录总结方便后续学员观看。

在这里插入图片描述

aosp13和aosp14的CaptionView对比情况

aosp13时候,课程也分析过,在进入自由窗口后主要是变成DecorCaptionView这个layout容器
在这里插入图片描述

安卓14版本已经看不到有相关的DecorCaptionView
在这里插入图片描述下面来剖析aosp 14上到底是啥原理。

aosp 14 CaptionWindow图层情况

注意这里的这里的CaptionWindow其实并不可以通过dumpsys window windows这样方式看到它,说明它本身不是一个windowstate,不受窗口层级结构树管理,只能在sf的dump看到,为了更加直观使用winscope来看看

SurfaceFlinger看看图层,明显看到了Caption of Task这个顶部工具图层
在这里插入图片描述但是在window的图层结构没有看到
在这里插入图片描述

核心拖动放大逻辑处理

代码位置

frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java

拖拉上面的CaptionWindow部分,让自由窗口移动堆栈情况

onDragPositioningStart:73, FluidResizeTaskPositioner (com.android.wm.shell.windowdecor)
handleMotionEvent:265, CaptionWindowDecorViewModel$CaptionTouchEventListener (com.android.wm.shell.windowdecor)
onMotionEvent:72, DragDetector (com.android.wm.shell.windowdecor)
onTouch:249, CaptionWindowDecorViewModel$CaptionTouchEventListener (com.android.wm.shell.windowdecor)
dispatchTouchEvent:15651, View (android.view)
dispatchTransformedTouchEvent:3114, ViewGroup (android.view)
dispatchTouchEvent:2787, ViewGroup (android.view)
dispatchPointerEvent:15919, View (android.view)
processPointerEvent:7021, ViewRootImpl$ViewPostImeInputStage (android.view)
onProcess:6815, ViewRootImpl$ViewPostImeInputStage (android.view)
deliver:6229, ViewRootImpl$InputStage (android.view)
onDeliverToNext:6286, ViewRootImpl$InputStage (android.view)
forward:6252, ViewRootImpl$InputStage (android.view)
forward:6417, ViewRootImpl$AsyncInputStage (android.view)
apply:6260, ViewRootImpl$InputStage (android.view)
apply:6474, ViewRootImpl$AsyncInputStage (android.view)
deliver:6233, ViewRootImpl$InputStage (android.view)
onDeliverToNext:6286, ViewRootImpl$InputStage (android.view)
forward:6252, ViewRootImpl$InputStage (android.view)
apply:6260, ViewRootImpl$InputStage (android.view)
deliver:6233, ViewRootImpl$InputStage (android.view)
deliverInputEvent:9211, ViewRootImpl (android.view)
doProcessInputEvents:9162, ViewRootImpl (android.view)
enqueueInputEvent:9131, ViewRootImpl (android.view)
onInputEvent:9337, ViewRootImpl$WindowInputEventReceiver (android.view)
dispatchInputEvent:267, InputEventReceiver (android.view)
nativePollOnce:-1, MessageQueue (android.os)
next:335, MessageQueue (android.os)
loopOnce:162, Looper (android.os)
loop:294, Looper (android.os)
run:67, HandlerThread (android.os)

边角触摸点击拖拽放大,让自由窗口放大执行堆栈情况


onDragPositioningStart:73, FluidResizeTaskPositioner (com.android.wm.shell.windowdecor)
handleMotionEvent:325, DragResizeInputListener$TaskResizeInputEventReceiver (com.android.wm.shell.windowdecor)
onMotionEvent:72, DragDetector (com.android.wm.shell.windowdecor)
handleInputEvent:302, DragResizeInputListener$TaskResizeInputEventReceiver (com.android.wm.shell.windowdecor)
onInputEvent:295, DragResizeInputListener$TaskResizeInputEventReceiver (com.android.wm.shell.windowdecor)
dispatchInputEvent:267, InputEventReceiver (android.view)
nativePollOnce:-1, MessageQueue (android.os)
next:335, MessageQueue (android.os)
loopOnce:162, Looper (android.os)
loop:294, Looper (android.os)
run:67, HandlerThread (android.os)

总结差异

总结出来了Caption在aosp13和aosp14的差别

在这里插入图片描述在这里插入图片描述

更多framework技术干货,请关注下面“千里马学框架”

无人机飞控传感器全解析:从IMU到光流传感器的实战应用 本文深入解析了无人机飞控系统的核心传感器,从IMU、气压计、磁力计到光流传感器,详细阐述了其工作原理、数据融合策略及常见挑战。结合ICF5、Pixhawk 6C等主流飞控硬件,提供了从传感器校准、滤波器调优到应对室内光流定位、强磁干扰等实战场景的系统性优化指南,帮助开发者突破飞控“黑箱”,实现更稳定、可靠的飞行控制。 阅读详情

相关推荐

VS2015+Qt+OpenCV+open62541开发过程(05_VS2015中使用OPCUA open62541通过Kepware读写PLC数据)

此外还需要所需lib包:WS2_32.Lib(opcua通讯用到的库,opcua使用socket通讯,需使用此库),添加#pragma comment(lib,"ws2_32.lib") 语句,有的文章说需要添加ws2_32.lib文件或ws2_32.dll到项目资源中,貌似影响不大。2.在VS中选择x64平台会报错,选择x86平台可以用,应该是ws2_32.lib相关的库不支持64位,目前没有解决,继续后面的实验,看看用Qt后是否可以解决。6.VS中建立的变量,与读取的OPC点数据类型注意对应。

zzh17的博客 1862

重温View绘制原理(一)

1. View的知识前提 View的绘制是从上往下一层层迭代下来的:DecorView–>ViewGroup(—>ViewGroup)–>View,所以,在学习view的绘制原理前,我们来先看看DecorView。 1.1 DecorView的视图结构 Android 中 Activity 是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图。每个a...

何武昭的专栏 1545

K型热电偶分度表读取方法

K型热电偶分度表读取方法

guaizaiguaizai的博客 5904

Android中View绘制流程(源码)

日常开发中,我们经常碰到需要自定义View(包括自定义View和ViewGroup)的地方,并且在面试中也需要我们熟悉或者精通自定义View。毕竟有时候我们需要实现的效果,Android本身是没有提供的,就需要我们去自定义,掌握原理可以让我们在实际使用中更加得心应手。 一、View是如何被添加到屏幕上的 从Activity走起,我们日常是通过Activity的onCreate()方法中的 se...

Silicon_Valley 822

深入浅出ASAP2标准:手把手教你编写和解析A2L文件(含Python示例代码)

本文深入解析ASAP2标准下的A2L文件,涵盖基础概念、文件结构及Python实现代码,帮助开发者掌握汽车ECU标定和测量中的关键数据管理技术。通过详细示例,展示如何编写和解析A2L文件,提升电控数据管理效率。

happy2的博客 1100

QCC308X/518X/309X加LDAC解码

QCC308X/518X/309X加LDAC解码。

Alex_886的博客 6609

认识Android中的ViewRootImpl和DecorView

PS:本文系转载文章,阅读原文可读性会更好些,原文链接: https://mp.weixin.qq.com/s/EGFHW7URuIv0HqwZWt09sg ps:源码是基于 android api 27 来分析的 ViewRootImpl 是用来测量、布局和绘制 View 用的,View 的测量、布局和绘制是从 Activity 的 makeVisible方法开始的,但是本篇文章重点不是具体讲这个(View 的测量、布局和绘制代码细节),而是讲对 ViewRootImpl和DecorView 认知。 1、

qq_37837621的博客 812

武汉大学朱玉贤院士团队再发Nature Genetics,阐述棉花独特折叠胚胎形成的分子调控与演化机制

武汉大学朱玉贤院士团队再发Nature Genetics,阐述棉花独特折叠胚胎形成的分子调控与演化机制。

Pangenes的博客 1335

Android中Activity的setContentView方法分析

PS:本文系转载文章,阅读原文可读性会更好些,原文链接:https://mp.weixin.qq.com/s/sphTiuqVgPLFC0Yg2CyW0g ps:源码是基于 android api 27 来分析的 这一篇我们分析 Activity 的 setContentView 方法到底做了什么事情,有的读者可能心存疑虑,文章有的地方看不懂怎么办,之前我看文章的时候也是有这样的疑虑,目前我采取的办法有2种:(1)看不懂的地方可以先跳过,看完本篇文章后再 google 一下看不懂的地方;(2)看不懂的地方先

qq_37837621的博客 755

[SV]SystemVerilog学习笔记之struct & union

SystemVerilog学习笔记(四) 一、结构体(struct) 1.1、结构体(struct) 结构体声明:结构体默认是变量,也可以声明为线网 var struct{ //通过var进行结构体变量声明 logic [31:0] a, b; logic [ 7:0] opcode; } Instruction_Word_var; wire struct{ //结构体线网声明,定义为线网类型时,结构体的所有成员必须...

元直的博客 1万+

从0到1构建数据分析AI Agent:数据采集、洞察生成与报告自动化

在企业数字化转型的今天,数据分析师80%的时间被消耗在重复取数、数据清洗、报表排版等低价值劳动上,真正用于深度业务洞察和决策支持的时间不足20%。本文将从核心概念、技术原理、代码实现、落地实践全维度,教你从0到1搭建一套完整的数据分析AI Agent系统,实现「用户用自然语言提需求→Agent自动采集多源数据→AI自动挖掘业务洞察→自动生成符合业务要求的多格式报告」的全链路自动化,平均可将需求响应速度从天级压缩到分钟级,释放70%以上的分析师人力成本。

AI Python 编程之道的博客 472

安卓页面绘制流程(2)Window和DecorView的创建

讲解DecorView,ViewRootImpl,Window的关系和创建时机。

分享+记录 2540

计算机等级考试(二级WPS)---真题14套

目录 真题14一、选择题二、WPS文字三、WPS表格四、WPS演示21.打开考生文件夹下的素材文档 “WPS.docx”(.docx 为文件扩展名),后续操作均基于此文件,否则不得分。小周正在整理一份关于极光的文档,请按要求帮助她完成文档的排版工作。1.将全文中的手动换行符全部替换为中文句号并回车,删除文中的空行和空格。2.将正文第 2 段(“在我國的古書…… 極光”)中的繁体字转换成简体字,并为其设置 “正文” 样式。3.对文档样式进行如下设置:4.为 “1.3 极光的形态” 一节中列出的五种极光形态特征

2401_82750246的博客 1176

安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战

因为Caption是属于单独的图层,和Activity的图层都不在一个,而且Caption图层是显示在Activity图层的顶部,而DecorView等明显是Activity图层的一个View,边框红线自然就被Caption栏给遮挡了。即新建一个划线图层处于Caption图层的上面,这样划线图层就可以在自由窗口最顶部进行显示,不会被遮盖,具体实现其实就可以同样参考Caption实现 ,搞一个Windowless的窗口进行绘制。即自由窗口在被触摸放大缩小时候,边框要被画成红色的线条,表示选中。

liaosongmao1的专栏 310

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Android 源码解析】浅谈DecorView与ViewRootImpl

一、前言 对于Android开发者而言,View无疑是开发中经常接触的,包括它的事件分发机制、测量、布局、绘制流程等。如果要自定义一个View,那么应该对以上流程有所了解、研究。在深入接触View的测量、布局、绘制这三个流程之前,我们从Activity入手,看看从Activity创建后到View的绘制之前,所要经历的步骤。   二、从setContentView说起 一般地,我们在Ac...

你关注了我,是个概率极低的事件...... 6145

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android DecorView浅析

一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。 三、LinearLayout里有两个FrameLayout子元素。   (20)为标题栏显示界面。只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标题栏View将加入Fra

robot的专栏 976

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android View

Android View指的是Android系统重提供的一种用于处理UI的机制。Android中的所有UI元素都是View对象,这些View对象被组织在一个View树中,形成了整个应用程序的UI界面。View对象是Android中的级别组件,它们可用于构建复杂的应用程序界面,View对象可以是一个简单的文本框或一个自定义绘制的图形。在Android系统中,View对象的绘制被分解成几个不同的阶段,每个阶段都会涉及到某些特定的处理逻辑,包括布局、绘制、事件分发、动画和输入处理等。

liuning1985622的博客 1314

Android标题栏各种设置

1、隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); 2、在标题栏显示进度条 requestWindowFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.progressbar_1); setProgressBarVisibility(true); final Pr...

wangxiaohigh 701

Android笔记(四)DecorView & ViewRootImpl & Window

这三者之间的关系网络上有很多篇不错的blog。比如这篇。为了让自己更加熟悉View绘制的流程,在这里特意将这三者的关系好好梳理一番。 为了理清这三者的关系,还是先上一张图 ViewRootImpl是ViewRoot的实现类,ViewRoot不是view,而是整个ViewTree的管理者。 DecorView是整个ViewTree的根布局视图 ViewRoot通过在Activity.att...

u014529755的专栏 1502

Android-举一反三:12个View绘制流程高频面试题,带你全面理解View的绘制流程

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。【Android思维脑图(技能树)】

2301_81694225的博客 510

android认识窗口

这里我按照自己的理解画了一下Android架构图,主要是对看下Framework这块:顶层是基于ApplicationFramework层的Apps层,ApplicationFramework是运行在App进程的Framework代码,如四大组件,各种Manager。在这一层,屏幕上的一块显示区域,典型代表是Activity,但是Activity毕竟是一个综合性比较强的概念,具体到内容显示这块还是由Window类负责,Window则是容纳View对象的容器。

Rainman博的专栏 832

Android13原生小窗模式“全屏”“关闭”开启遥控聚焦

最近再看Android的小窗模式,接到需求,窗口的标题栏上有“全屏”、“关闭”两个按钮,需要能使用遥控器聚焦(默认是无法获焦的),并且能遥控触发相关的点击事件,特此记录下。具体的小窗模式的介绍、开启、使用等等资料大家就自行查阅了,我这里贴出一篇详细的介绍文章,强烈建议感兴趣的小伙伴看看。

rophy___的博客 1498

Android高级-View是如何被添加到屏幕窗口上

View被添加到屏幕上分为以下几个步骤: 1 创建 顶层布局容器DecorView 新建一个extends的Activty 类,从onCreate方法的setContentView方法进入源码开始分析 setContentView(R.layout.activity_s_econd); /...

u013815832的博客 687

Android自定义控件--评分星级View

在开发电商项目中经常都会遇到一些星级评分控件的需求,有需求就必然有开发。废话不多说,没图没真相,上图: 确定需求: 可以控制子item之间的边距 自定义选中图片和未选中图片 摆放纵向或者横向 可选择选中数量 基本绘制流程: 1 自定义属性 <!--星星控件属性--> <declare-styleable name="StarBarView"> <!--设置星星间的间隔-->

caption_deng的博客 907
上一篇: aosp13自由窗口项目出现图库app划线不全bug修改-安卓framework实战项目
下一篇: 如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值