开发者选项-显示指针位置

news/2024/10/4 5:30:08

开发者选项-指针位置

应用设置部分

搜索对应字串,在SettingsLib中搜到“指针位置”字串,其id名为pointer_location

根据id在Settings中搜索布局相关(res/xml/development_settings.xml)

查看其key(pointer_location)相关代码

显然,在点击指针位置的控件时,在设置中会对应在Settings.System表中pointer_location字段写入1/0(启用/不启用)

框架监听获取

在WindowManagerService的构造方法中有如下代码(创建一个SettingsObserver对象)

这里SettingsObserver是WindowManagerService的一个内部类

在其构造方法中有注册自身为监听器

查看其onChange方法

从上面SettingsObserver相关代码可看出,在设置中操作指针位置的控件时,设置Settings.System.POINTER_LOCATION的值后,WindowManagerService中SettingsObserver会监听到变更,然后调用updatePointerLocation方法

查看updatePointerLocation方法,这里先根据DisplayPolicy::setPointerLocationEnabled方法和获取的mPointerLocationEnabled状态值生成了一个PooledCOnsumer变量,然后将其作为参数调用了mRoot.forAllDisplayPolicies方法

这里mRoot是RootWindowContainer变量,查看其forAllDisplayPolicies方法

这里mChildren是一个列表,里面元素是DisplayContent对象,一般单屏幕机器就一个屏幕,mChildren也就只有一个元素,其getDisplayPolicy方法返回的也就是DisplayPolicy的对象

上面updatePointerLocation最后会调用DisplayPolicy的setPointerLocationEnabled方法

一般只有一个屏幕时isDefaultDisplay肯定时true,从上面代码看这里主要发送了个消息MSG_ENABLE_POINTER_LOCATION/MSG_DISABLE_POINTER_LOCATION(启用/不启用),查看消息处理代码

先看下启用时逻辑:

显然这里主要是添加了一个根节点控件为PointerLocationView的窗口(窗口名为PointerLocation – display 0)(窗口只显示了指针位置和上方显示坐标等信息的横条,其他基本是透明的,且该窗口不拦截事件,使其透传到下方),并添加了事件分发的监听,在监听到事件时,进行重绘,在其onDraw方法中有相关绘制逻辑,具体绘制这里不详述

在关闭启用时调用disablePointerLocation,这里和启用是相对的,这里会移除添加的窗口,取消事件分发的监听

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

BootAnimation简析

BootAnimation简析BootAnimation是开机动画,其对应源码在frameworks\base\cmds\bootanimation(这里使用android12的代码查看,不同版本代码有差异,但大体逻辑一般都差别不大),其编译产物是个二进制可执行文件bootanimation,在开机过程中会执行播放开机动画,其目录中有个…

Unreal RecastNavigation 开源项目详解

Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目, HALO中使用的也是这个开源库。导航最重要的就是为NPC寻路,以及其他的寻路需求。0 前言 Recastnavigation是一个游戏AI导航库,像Unity,UE引擎中都集成了这个开源项目, HALO中使用的也是这个开…

编写单个函数的ROP链

什么是ROP链 在我初识栈溢出那篇博客已经详细的讲了函数的调用过程(基于X86框架),不了解的可以看一下,没有这个理论基础,是学不好ROP的。现在我们说一下什么是ROP。 ROP链就是通过返回地址的修改来完成的编程,调用特定的函数的一种编程模式。我们可以联想一下你做的最简单…

计组要我命第五天中

要命计组(6) 开始时间 2024-06-1612:38:07 结束时间 2024-06-16 15:01:11 前言:吃完饭,睡会觉,继续计组[fine]. 总结:中场休息!

聊聊育种大模型

从去年年末开始到现在,大语言模型(Large Language Models,LLM)热度依旧不减。 有实力烧钱的机构在训练自己的LLM,没实力想凑热闹的更聚焦在垂直领域的应用上,绝大多数企业属于后者。 每个行业多多少都有人在做基础模型的微调和打造私有知识库,以期不被时代抛弃。 医疗、…

MyBatis 的缓存机制

1. MyBatis 的缓存机制 @目录1. MyBatis 的缓存机制2. 准备工作3. MyBatis 的一级缓存3.1 一级缓存失效情况/条件4. MyBatis 的二级缓存5. MyBatis 集成 EhCache 第三方缓存6. 总结:7. 最后:缓存(Cache) 缓存的作用:通过减少 IO 的方式,来提高程序的执行效率 。 MyBatis …

KAN:使用 Microsoft 的 KubeAI Application Nucleus简化边缘 AI

我们需要的是在 Kubernetes 上构建和管理边缘机器学习应用程序的一致方法,一种可以加快开发和交付速度的方法。这就是 KAN 的作用,即 KubeAI Application Nexus。正如介绍性博客文章所指出的那样,这个名字来自一个普通话动词,翻译为“观看”或“看”。KAN 是一个开源项目,…

word中批量修改mathtype公式格式

1、打开一个公式,设置好格式、字体大小等 2、预置/公式预置/保持到文佳,假设保存文件命名为measurement.eqp 3、打开word,mathtype/格式化公式,选择保存的measurement.eqp文件,确定即可