当前位置: 首页 > news >正文

【Android】坐标系

Android 系统中有两种坐标系,分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作,比如我们要实现 View 的滑动,你连这个 View 的位置都不知道,那如何去操作呢?

一、Android 坐标系

在 Android 中,将屏幕左上角的顶点作为 Android 坐标系的原点,这个原点向右是 X 轴正方向,向下是 Y 轴正方向,如图1所示。另外在触控事件中,使用 getRawX() 和 getRawY() 方法获得的坐标也是 Android 坐标系的坐标。
请添加图片描述

图1 Android 坐标系

二、View 坐标系

View 坐标系与 Android 坐标系并不冲突,两者是共同存在的,它们一起来帮助开发者更好地控制 View。对于 View 坐标系,我们只需要搞明白图2中提供的信息就好了。
请添加图片描述

图2 View 坐标系

  1. View 获取自身的宽和高

    根据图2可以得到很多结论,首先我们能算出 View 的宽和高:

    width = getRight() - getLeft()
    height = getBottom() - getTop()
    

    当然这样做显然有些麻烦,因为系统已经向我们提供了获取 View 宽和高的方法。getWidth() 用来获取 View 自身的宽度,getHeight() 用来获取 View 自身的高度。从 View 的源码来看,getWidth() 和 getHeight() 获取 View 自身的宽度和高度的算法与上面从图2中得出的结论是一致的。View 源码中的 getWidth() 方法和 getHeight() 方法如下所示:

    public final int getWidth() {return mRight - mLeft;
    }public final int getHeight() {return mBottom - mTop;
    }
    
  2. View 自身的坐标

    通过如下方法可以获得 View 到其父控件(ViewGroup)的距离。

    • getTop():获取View自身顶边到其父布局顶边的距离。
    • getLeft():获取View自身左边到其父布局左边的距离。
    • getRight():获取View自身右边到其父布局左边的距离。
    • getBottom():获取View自身底边到其父布局顶边的距离。
  3. MotionEvent 提供的方法

    图2中的那个蓝色圆点,假设就是我们触摸的点。我们知道无论是 View 还是 ViewGroup,最终的点击事件都会由 onTouchEvent(MotionEvent event)方法来处理。MotionEvent 在用户交互中作用重大,其内部提供了很多事件常量,比如我们常用的 ACTION_DOWN、ACTION_UP 和 ACTION_MOVE。此外,MotionEvent 也提供了获取焦点坐标的各种方法。

    • getX():获取点击事件距离控件左边的距离,即视图坐标。
    • getY():获取点击事件距离控件顶边的距离,即视图坐标。
    • getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标。
    • getRawY():获取点击事件距离整个屏幕顶边的距离,即绝对坐标。
http://www.lryc.cn/news/307095.html

相关文章:

  • OSCP靶场--Slort
  • 大数据职业技术培训包含哪些
  • 【Java程序设计】【C00313】基于Springboot的物业管理系统(有论文)
  • TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑
  • docker创建mongodb数据库容器
  • Python并发编程:多线程-线程理论
  • 自定义Chrome的浏览器开发者工具DevTools界面的字体和样式
  • 人事|人事管理系统|基于Springboot的人事管理系统设计与实现(源码+数据库+文档)
  • React18源码: Fiber树中的优先级与帧栈模型
  • Hive 最全面试题及答案(基础篇)
  • 【力扣】整数反转,判断是否溢出的数学解法
  • Jmeter之内置函数__property和__P的区别
  • GPT润色指令
  • Ubuntu中matplotlib显示中文的方法
  • String类-equals和==的区别-遍历-SubString()-StringBuilder-StringJoiner-打乱字符串
  • IDEA的LeetCode插件的设置
  • 2024.2.29 模拟实现 RabbitMQ —— 项目展示
  • React htmlfor
  • 现代化数据架构升级:毫末智行自动驾驶如何应对年增20PB的数据规模挑战?
  • 理解Stable Diffusion、LoRA、Dreambooth、Hypernetworks、Textual Inversion、Checkpoint
  • spring boot3登录开发-2(1图形验证码接口实现)
  • 网络编程中的问题总结
  • 数据结构-关键路径
  • 进程间通信学习笔记(共享内存)
  • ChatGPT学习第三周
  • R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术应用
  • [C++]使用C++部署yolov9的tensorrt模型进行目标检测
  • eureka注册中心做了哪些事情/原理?
  • c语言经典测试题4
  • 设计模式(五)-观察者模式