android View coordinate(坐标)


坐标系在二维视图中通过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开发艺术探索》的资料








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值