【Android】事件、绘制坐标系相关

一,事件坐标系

即MotionEvent事件下发的坐标系,其坐标轴如下

MotionEvent#offsetLocation方法可调整坐标原点,以影响MotionEvent#getX,MotionEvent#getY值,以匹配子View的坐标参考系,进而进行事件处理。注意,offsetLocation是累加方法,

offsetLocation在ViewGroup#onTouch-->dispatchTouchEvent-->dispatchTransformedTouchEvent中进行调整并下发到子View,如下

dispatchTransformedTouchEvent翻译即转换坐标系后的事件。

核心方法即此处,通过child#left、top以及滚动x、y,调整坐标原点,随后将此MotionEvent下发至child,再通过offsetX、offsetY还原至当前View坐标系,以适应handled返回false后,需Parent继续处理的情况。

二,绘制坐标系

与事件坐标系一样,绘制Cavans绘制的坐标系,其坐标轴如下,

即以左上为中心点,通过Cavans#drawXXX(x,y)实现指定区域绘制。

此坐标原点可通过Cavans#translate方法平移变化。即,如果系统从没调用过Cavans#translate方法,绘制坐标原点则默认是屏幕左上角区域。而对于每个View,在onDraw中传入的Cavans绘制,坐标原点是当前View左上角,这是怎么实现的呢?

很简单,View#draw方法通过当前View的Layout,预处理了坐标原点。

ViewGroup调用View#draw方法,注意,这是三个参数的draw

此处可暂忽略HWI RenderNode,只需明白,在translate坐标原点后,View再次调用了一个参数draw方法,进而调用到onDraw,其传入的Canvas,原点已经经过了绘制VIew修正。

当View绘制完毕时,对于Parent View,则需要将坐标原点还原至前一个位置,这个通过Cavans#restoreToCount方法实现,其传入的restoreCount则可在translate前通过Cavans#save方法获取,

以上,即View绘制坐标系统。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地Linux服务器使用Docker快速部署SyncTV

文章目录前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 当想和异地恋人同步看恐怖片却因网络延迟错过惊悚瞬间,或与朋友组队观看电竞直播时无法实时吐槽…这些尴尬场景或许你都经历过。而SyncTV的存在正是为了解决…

搭建比分网服务器怎么选数据不会卡顿?

一、 体育比分网站的独特技术挑战体育比分网站是互联网服务中的"极限运动",面临三大技术高峰:数据实时性:NBA最后2分钟的比分延迟超过1秒就会流失用户流量脉冲:欧冠决赛时流量可能是平时的50-100倍全球覆盖:…

7月18日总结

bashupload / upload files from command line 远程文件包含 介绍一个上传文件的网站 bashupload.com 简介 借助bashupload.com,可以简朴地从下令行上传文件,剖析给其他的服务器,桌面和移动装备,最大支持25G。上传的文件会被保留…

【leetcode】3202. 找出有效子序列的最大长度(2)

文章目录题目题解题目 3202. 找出有效子序列的最大长度(2) 给你一个整数数组 nums 和一个 正 整数 k 。 nums 的一个 子序列 sub 的长度为 x ,如果其满足以下条件,则称其为 有效子序列 : (sub[0] sub[1]) % k (su…

Linux内核网络栈深度剖析:inet_connection_sock.c的服务器端套接字管理

引言 在Linux网络协议栈中,net/ipv4/inet_connection_sock.c是实现面向连接协议(如TCP)服务器端逻辑的核心文件。它承载了从端口绑定、连接接受到资源回收的全流程管理,是构建高并发网络服务的基石。本文将深入解析其关键机制和实现原理。 一、地址匹配:端口冲突检测的基…

机器学习中核心评估指标(准确率、精确率、召回率、F1分数)

混淆矩阵混淆矩阵是一个表格,用于总结分类模型在测试集上的预测结果,特别是当真实标签已知时。它将预测结果分为四种情况(记忆:实际和预测一致为True,预测为正是Positive):真正例: 实…

从零搭建Cloud Alibaba

1.初始环境的搭建 1.1环境要求: Spring Boot 3.2.5: 基于最新的 Spring Framework 6.x。支持现代化开发模式,帮助开发更加高效。 JDK 17 或更高版本: Spring Boot 3.x 开始要求 Java 17 作为最低运行环境。 Spring Boot 与 Sp…

Spring AI 工具调用

文章目录简述工具定义工具上下文直接返回方法:直接返回工具执行框架控制工具执行用户控制的工具执行异常处理简述 工具调用(也称为函数调用)是 AI 应用程序中的一种常见模式,允许模型与一组 API 或工具进行交互,从而增…

GitHub 趋势日报 (2025年07月20日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图2033maybe737remote-jobs674Hyprland581n8n572shadPS4341bknd281Resume-Matcher249…

替代标准库:实用 C++ 开源组件推荐

C17 及 C20 引入了许多现代化的标准库组件,如 std::filesystem、std::optional、std::format、std::chrono 的增强,以及 std::expected 等。然而,在一些项目中,受限于老版本编译器、不完善的标准库实现,或跨平台兼容性…

夯实基础:配置Java开发环境JDK与构建工具Maven

摘要:在前面两个章节中,我们一同探讨了Spring Boot的革命性优势,并深入其内部,理解了起步依赖、自动配置和内嵌容器这三大核心基石。理论的铺垫是为了更稳健的实践。从本章开始,我们将正式“卷起袖子”,搭建…

PyCharm 未正确关联 .jpg 为图片格式

1. PyCharm 未正确关联 .jpg 为图片格式PyCharm 可能错误地将 .jpg 文件识别为文本文件,导致无法预览图片。解决方法手动关联 .jpg 为图片格式:Windows/Linux: File → SettingsmacOS: PyCharm → Preferences进入 Editor → File Types。在 Recognized …

DM8数据库Docker镜像部署最佳实践

DM8数据库Docker镜像部署最佳实践一、Docker加载DM8镜像二、Docker创建DM8容器三、验证目录是否挂载成功一、Docker加载DM8镜像 1.下载DM8镜像,由于官网暂未提供docker镜像下载,可通过网盘下载:https://pan.quark.cn/s/fe38ba821a2a 2.打开…

数据结构——树(2)

数据结构基础(12) 文章目录数据结构基础(12)二叉树的先序遍历先序遍历中序遍历后序遍历二叉树的层序遍历由遍历序列构造二叉树前序 中序遍历序列后序 中序遍历序列层序 中序遍历序列二叉树的中序遍历(缺点&#xff…

【C语言进阶】结构体练习:通讯录

要求: 实现一个通讯录。 (1)人的信息: 包括姓名、年龄、性别、电话地址。 (2)功能: ①存放一百个人的信息。 ②增加联系人。 ③删除指定联系人。 ④查找指定联系人。 ⑤修改联系人。 ⑥排序。 ⑦显示联系人。 (3)文件: ①contact.…

缓存三剑客解决方案

缓存三剑客解决方案 1.缓存雪崩 定义: 大量缓存数据在同一时间点集体失效,导致所有请求直接穿透到数据库,引发数据库瞬时高负载甚至崩溃。 解决方案: 设置过期随机值,避免大量缓存同时失效。 // 缓存雪崩防护&#xff…

HTML 页面禁止缩放功能

页面禁止缩放 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1, shrink-to-fitno, maximum-scale1.0, us…

在github上搭建自己主页

主要是这篇博客进行一些补充。 第一步照做就行 首先是第二步 克隆仓库到本地 先下载一个git&#xff0c;电脑创建一个新文件夹&#xff0c;然后 git clone xxxxx 注意即使你使用了代理&#xff0c;这里大概率也会报错&#xff0c;Failed to connect to github.com port 443 …

Laravel 框架NOAUTH Authentication required 错误解决方案-优雅草卓伊凡

Laravel 框架NOAUTH Authentication required 错误解决方案-优雅草卓伊凡NOAUTH Authentication required 错误这个错误通常出现在以下几种情况&#xff1a;Redis 认证问题&#xff1a;如果你的应用使用了 Redis 且配置了密码API 认证问题&#xff1a;请求需要认证的 API 端点但…

kafka生产端和消费端的僵尸实例以及解决办法

目录 一 生产端僵尸 1.1 原因 1.2 问题 1.3解决办法 1.4 案例 1.4.1 案例1&#xff1a;生产者崩溃后重启 (同一 transactional.id) 1.4.2 案例2&#xff1a;短暂网络分区导致的脑裂 1.4.3 案例3&#xff1a;正确 - 解决僵尸 1.4.4 案例4&#xff1a;错误 - 无法解决僵…