• 【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()
      
      • 1
      • 2

      当然这样做显然有些麻烦,因为系统已经向我们提供了获取 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;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    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():获取点击事件距离整个屏幕顶边的距离,即绝对坐标。
  • 相关阅读:
    thinkPHP基于php的衡水游泳馆管理系统--php-计算机毕业设计
    【数据结构笔记05】数据结构之栈的链式表示和实现(链栈)
    Java面试题之多态
    十四、数据库的导出和导入的两种方法
    FISCO BCOS开发第一个区块链应用--小白实战
    深入理解Spring Boot AOP:CGLIB代理与JDK动态代理的完全指南
    WPF DataGrid开箱即用支持全部勾选的DataGridCheckBoxColumn
    AQS源码阅读
    时间序列预测 | Python实现Attention-Transformer时间序列预测(TSAT model)
    第5章 操作符和表达式
  • 原文地址:https://blog.csdn.net/cnwutianhao/article/details/136279352