上一篇写了Android控件架构学个明白--Android控件架构

Android 世界的坐标系

  • Android 坐标系
  • 视图坐标系

1.Android 坐标系

在Android中,将屏幕的最左上角的顶点作为Android坐标系的原点。
从这个点向右是X轴的正方向,从这个点向下是Y轴的正方向。

看图:


学个明白--Android世界的坐标系_第1张图片 Android坐标系.png

2.视图坐标系

这个坐标系有点意思,它是相对的。它描述的是子视图在父视图中的位置关系。和上面的Android坐标系并不矛盾,还相辅相成哩。
它的坐标系方向也是原点向右为X轴正方形,向下为Y轴正方向。只不过原点不再是屏幕的左上角,而是以父视图左上角为坐标原点。

看图:

学个明白--Android世界的坐标系_第2张图片 视图坐标系.png

2.1让我们来玩翻视图坐标系:

看图:


学个明白--Android世界的坐标系_第3张图片 视图坐标系探索.png

我们很容易得到View的这四个参数,在View的源码中,他们分别对应mLeft,mTop,mRight,mBottom.
获取方式为:

Left = getLeft();Top = getTop();Right = getRight();Bottom = getBottom();

那么,我们很容易能得出View宽高和坐标的关系,你说是不是?

width = right - leftheight = bottom - top

在3.0开始,View增加了额外的几个参数: x,y,translationX,translationY.
这几个参数也是相对于父容器的坐标

  • x,y是View左上角的坐标。
  • translationX,translationY是`View左上角相对于父容器的偏移量。默认值是0

View也提供了get/set方法
换算关系如下:

//x,y是View左上角的坐标!!!x = left + translationXy = right + translationY

注意

View在平移过程中,top,left表示的是原始左上角的位置信息,其值并不会发生变化,此时发生改变的是x,y,translationX,translationY 这四个参数。

3.MotionEvent提供的获取坐标的方法

这里既然提到了MotionEvent,那就顺便把MotionEvent给说说。

MotionEvent

在手指接触都屏幕后所产生的一系列事件中,典型的事件有:

  • MotionEvent.ACTION_DOWN —-单点触摸按下(接触屏幕)动作
  • MotionEvent.ACTION_MOVE —-手指在屏幕上滑动
  • MotionEvent.ACTION_UP —-单点触摸离开动作
  • MotionEvent.ACTION_CANCLE —-触摸动作取消
  • MotionEvent.ACTION_OUTSIDE —-触摸动作超出边界
  • MotionEvent.ACTION_POINTER_DOWN —-多点触摸按下动作
  • MotionEvent.ACTION_POINTER_UP —-多点离开动作
    (更多的事件可以自己看下源码哟)
// 既然是触摸事件,我们当然要在onTouchEvent()方法中搞事情了!@Overridepublic boolean onTouchEvent(MotionEvent event) {    // 获取坐标    int x = (int) event.getX();    int y = (int) event.getY();    // event.getAction()    switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            // ...            break;        case MotionEvent.ACTION_MOVE:            //...            break;        case MotionEvent.ACTION_UP:            //...            break;            //…更多的触摸事件动作    }    return true;}

该说说我们这次的主题--坐标了

通过MotionEvent对象,我们能拿到点击(文雅点说:触摸)事件发生位置的x,y坐标。系统提供了2组方法

1.视图坐标(也可以说是相对坐标)

获得的是相对于当前View左上角的x,y坐标

  • getX()
  • getY()

2.Android 坐标(也可以说是绝对坐标)

获得的是相对于手机屏幕左上角的 x, y 坐标。

  • getRawX()
  • getRawY()

参考资料:
developer.android.com
Android群英传
Android开发艺术探索

下一篇准备写View的测量

学个明白--View的测量

更多相关文章

  1. android获取gps坐标
  2. Android View系列 - 坐标系
  3. Android AbsListView坐标体系解析
  4. android度量相对于地球坐标系的加速度
  5. Android 坐标系及动画移动坐标相关集合
  6. Android 自定义View之坐标系(一)
  7. android坐标系相关知识点
  8. Android中的坐标系统
  9. android中的坐标系以及获取坐标的方法

随机推荐

  1. Android支持下列所有单位。
  2. Android中实现程序前后台切换效果。
  3. Android中Java根据文件头获取文件类型的
  4. android与WEB服务器交互时的SESSION
  5. 安卓从入门到乞討 List View一键点击Item
  6. 基于web的android图像处理示例(Win7+Apac
  7. 赵雅智:android发短信操作
  8. 阿里巴巴 面试经历
  9. 当你的Android(安卓)Studio 设置No proxy
  10. Android模拟器和安装APK文件基础教程