坐标系在二维视图中通过X轴和Y轴两个数字为组合表示某个点的绝对坐标。
例如(30, 100) 通常表示X轴30, Y轴100交叉的一个点。
1.View的位置主要是由它的四个顶点来决定的,分别对应:left、top、right、bottom,top是左上角的纵坐标,left是左上角的横坐标,
bottom是右下角的纵坐标,right是右下角的横坐标,这些都是相对于View的父容器来说的,是相对坐标,x轴与y轴的正方向是右和下,如图所示:
视图左侧位置 left = view.getLeft()
视图右侧位置 right = view.getRight()
视图顶部位置 top = view.getTop();
视图底部位置 bottom = view.getBottom();
视图宽度 width =view.getWidth();
视图高度 height = view.getHeight()
View的宽高与坐标关系:
width = right - left
height =bottom - top
2. 从Android 3.0开始,View新增加了几个参数:x 、 y 、 translationX 、 translationY 这几个参数也都是相对于父容器的相对坐标。x 和y 表示View 左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量,简单讲就是沿x轴,y轴移动的距离。translationX和translationY的默认值是0。几个参数的换算关系:
x = left + translationX ; 如上图 x = left ,translationX =0;
y =top + translationY; 如上图 y = top ,translationY =0;
补充说明:View 在平移过程中,top 、left表示的是原始左上角的位置信息,其值并不会发生改变,此时放生改变的是x 、 y 、 translationX 、 translationY 四个参数。
3.在MotionEvent事件中,我们可以获得点击事件发生的x和y坐标。系统提供了两组方法:getX/getY、getRawX/getRawY。getX/getY返回的是相对于当前View 左上角的x和y坐标(相对坐标),getRawX/getRawY返回的是相对于手机屏幕左上角的x和y坐标(绝对坐标)。
4. 在View滑动过程中,使用scrollTo和scrollBy实现滑动(这里的滑动只是View内容的滑动,并不能改变View在布局中的位置,类似于View动画的效果)我们可以获取mScrollX和mScrollY值,通过getScrollX/getScrollY获取。
getScrollX/getScrollY返回的是View内容的位置相对View布局的位置发生的偏移量。mScrollX的值等于View左边缘到View内容的左边缘的水平距离。View内容的左边缘在View左边缘的左边时,mScrollX为正值,从右向左滑动,反之负值;mScrollY值等于View上边缘到View内容上边缘的垂直距离。View内容的上边缘在View上边缘的上边时,mScrollY为正值,从下往上移动,反之负值。
如下:绿色方块代表View的内容位置,灰色方块代表的是View在父容器的位置,绿色前头代表的是滑动的方向和距离。
5.常用获取坐标方法
获取在当前窗口内的绝对坐标
View.getLocationInWindow()
获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
View.getLocationOnScreen()
下面一组是获取相对在它父窗口里的坐标。
View.getLeft() , View.getTop(), View.getBottom(), View.getRight()
View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。
实例:
int[] location = new int[2] ;
view.getLocationInWindow(location);
view.getLocationOnScreen(location);
注意:location[0]代表x坐标,location [1] 代表 坐标,使用该方法时一定是在View测量完成后,不然值为0.
=======================================
文章内容大量参考了《Android开发艺术探索》的资料