【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
英文地址,請注明出處:http://en.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;錯誤 - 無法解決僵…