首页 > 其他分享 >开发者选项-显示指针位置

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

时间:2024-06-16 15:59:22浏览次数:22  
标签:选项 控件 SettingsObserver 启用 开发者 方法 监听 指针

开发者选项-指针位置

应用设置部分

搜索对应字串,在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,这里和启用是相对的,这里会移除添加的窗口,取消事件分发的监听

标签:选项,控件,SettingsObserver,启用,开发者,方法,监听,指针
From: https://www.cnblogs.com/luoliang13/p/18250716

相关文章

  • C语言指针与数组的区别
    在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别:###数组1.**固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改变。2.**连续内存**:数组中的元素在内存中是连续存储的。3.**类型**:数组名代......
  • 博客园商业化之路-众包平台:继续召集早期合作开发者
    会员、周边、广告是园子现在维持生存的主要收入来源,而众包平台是园子未来实现商业化规模增长的希望所在。今年5月开始的众包平台建设是万里长征,不仅需要融资,还需要找到合伙人组建新的团队。虽然当前既没有钱又没人,但万里长征已经迈出了第一步,采用企业微信+自己搭建的gitlab以原......
  • 【Git入门和实战】第2课:git中的专有名词和概念解释:仓库、工作目录、暂存区、远程仓库
    本文是git入门到实战系列文章的第2课,主要讲解git中的专有名词和概念,主要有仓库(repository)、工作目录(WorkingDirectory)、暂存区(Stage/Index)、远程仓库(remote)、、提交(commit)、HEAD指针、文件状态、分支(branch)、合并(merge)、标签(tag)、引用(ref)。(文末附练习题,......
  • 【C++学习笔记 3】指针
    指针的本质指针实际上就是一个整数,存储着一个内存地址。不必执着于用“类型”的概念区分,那只是为了方便设计出来的,所有的指针,本质上都是一个整数,存储着一个内存的地址。#include<iostream>#defineLOG(x)std::cout<<x<<std::endlintmain(){ intvar=8; ......
  • C++内联函数、内联函数的概念、内联函数的特性、auto关键字、类型名字的问题、auto使
    文章目录前言一、内联函数1.内联函数概念2.内联函数特性二、auto关键字(C++11)1.类型名字的问题2.auto简介3.auto的使用细则1.auto与指针和引用结合起来用2.auto在同一行定义多个变量4.auto不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组3......
  • Studying-代码随想录训练营day9| 151.反转字符串里的单词、卡码网:55.右旋转字符串、28
    第九天,......
  • C++:智能指针
    文章目录背景内存泄漏内存泄漏的危害内存泄漏的分类堆内存泄露(HeapLeak)系统资源泄露如何避免内存泄漏智能指针的使用和原理RAII智能指针地原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用定制删除器背景由于C++11中引入了异常的概念,而异常会影响执行流,......
  • 初识C语言难点~~指针变量
    目录前言 一、什么是指针变量二、定义指针变量1、代码12、代码2(通过指针变量取得数据) 三、通过指针变量来交换主函数两个变量1、【正确示例】2、【错误示例】四、总结 前言大家好又见面了!!今天要说的是指针变量。 一、什么是指针变量指针变量是一种特殊的变......
  • 【C语言习题】30.使用指针打印数组内容
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题使用指针打印数组内容作业内容写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。2.解题思路先定义一个数组,使用指针打印数组内容那就是说我们可以通过对指针解引用,来访问......
  • 智能指针
    1.原因智能指针的出现主要是用来解决在实际的开发过程中程序员使用裸指针而导致的一系列问题。当然裸指针本身是安全的,只是会由于开发者的不规范使用而导致出现各类问题:申请的资源在程序运行结束后忘记释放了。对申请了的资源做了重复的释放由于程序的代码逻辑使得程序在中途......