在开发过程中有的时候我们会实现一些特殊功能, 如组件滑动到一定距离隐藏或显示, 图片置顶等等, 这个时候 view 的坐标就派上了用场了; 同样在自定义控件的时候, 坐标系也是经常用到的, 下面记录一下在复习过程中 view 坐标系的一些知识.
目录
view 的四个顶点坐标
view 的 x,y,translationX,translationY 坐标
MotionEvent 获取坐标
1. view 的四个顶点坐标
view 的位置主要由四个顶点坐标来决定, 并且这个四个坐标都是相当坐标, view 在移动过程中, 它们的值不会发生变化.
注: 图 1 灰色部分为 view 相对于其父容器的四个顶点坐标
四个顶点坐标分别为:
- getTop(); // 获取子 View 左上角距父 View 顶部的距离
- getLeft(); // 获取子 View 左上角距父 View 左侧的距离
- getBottom(); // 获取子 View 右下角距父 View 顶部的距离
- getRight(); // 获取子 View 右下角距父 View 左侧的距离
view 的宽高计算:
- // 宽 = right-left
- int width = getRight() - getLeft();
- // 框架自带
- int width2 = getWidth();
- // 高 = bottom-top
- int height = getBottom() - getTop();
- int height2 = getHeight();
2. view 的 x,y,translationX,translationY 坐标
android3.0 之后为 view 增加了 x,y,translationX,translationY 坐参数 (上面图 2). 其中 x,y 为 view 左上角的坐标, translationX,translationY 是 view 左上角相对于父容器的偏移量, 它们默认值为 0.
- //x,y 的计算
- float x = getLeft() + getTranslationX();
- float x2 = getX();
- float y = getTop() + getTranslationY();
- float y2 = getY();
3. MotionEvent 获取坐标
MotionEvent 主要用于处理用户触摸屏幕后的交互. 其获取的坐标信息如下:
注: 图 1 红色部分为 MotionEvent 获取的坐标信息
- // 触摸点相对于其所在组件的相对坐标
- event.getX();
- event.getY();
- // 触摸点相对于屏的绝对坐标
- event.getRawX();
- event.getRawY();
来源: https://juejin.im/post/5c5d853ff265da2deb6a8205