android坐标

说来说去都不如 画图示意 简单易懂啊!!!真是的! 来吧~~先上张图~~!

 

(一)首先明确一下 android 中的坐标系统 :

     屏幕的左上角是坐标系统原点(0,0)
     原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向
 
(二)关于Scroll: 屏幕显示的内容很多时,会有超出一屏的情况,于是就产生了Scroll的概念。
 
      在View类中有个方法:
      getScrollY()  英文原文描述是:
      Return the scrolled top position of this view. This is the top edge of the displayed part of your view....
      其实理解起来仍然就是:就是这个view相对于“坐标系统原点”(见上图)在Y轴上的偏移量.(getScrollX同理)
     【哇哈,有了图就是好说明啊~ 省了多少语言描述啊,而且还不一定能说清楚~】
 
      getScrollY()就是当前视图相对于屏幕原点在Y轴上的偏移量.

(三)MotionEvent类中 getRowX()和 getX()的区别:

      event.getRowX():触摸点相对于屏幕原点的x坐标
      event.getX():   触摸点相对于其所在组件原点的x坐标

     于是乎: view.getScrollY() + event.getY() 就得到了view中的触摸点在Y轴上的偏移量

android.view.View.layout(int l, int t, int r, int b)    layout的过程就是确定View在屏幕上显示的具体位置,在代码中就是设置其成员变量mLeft,mTop,mRight,mBottom的值,这几个值构成的矩形区域就是该View显示的位置,不过这里的具体位置都是相对与父视图的位置。mLeft代表当前view.layout的这个view的左边缘离它的父视图左边缘的距离,拿上面“子视图2.layout(int l, int t, int r, int b) ”来说,它的父视图便是子视图1,2,3合起来形成的整个大矩形,那么这里将父视图的左上角定为(0,0),那么可以确定mLeft为一个子视图宽度320,以此类推,mTop指当前view的上边缘离父视图上边缘的距离。而以此为界,mRight所指的是当前view的右边缘离父视图左边缘的距离,一眼可以看出值为640(mLeft+自己的宽度),mBottom也是指当前view的下边缘离父视图的上边缘的距离。至于为何如此,大概是因为坐标系的缘故,坐标中的任何点都必须以(0,0)为起点,XY轴为衡量。

视图左侧位置  view.getLeft() 
视图右侧位置 view.getRight()

视图顶部位置 view.getTop();
视图底部位置 view.getBottom();
这四个方法所获取到的各个左上右下的值与layout的四个参数代表的是一样的,都是相对父视图的左边缘与上边缘。

视图宽度 view.getWidth();
视图高度 view.getHeight() ;
这两个方法获取的是该view的高和宽,仅仅在滑动的情况下,或者说该view的大小如果不发生变化,它的值是不会变的。

view.getX();
view.getY();
getX和getY获取到的值为相对于父视图而言的两个左边缘和上边缘的距离。

view.scrollTo(x,y)  将整个父视图的左上角定为(0,0),再移动这个屏幕的左上角到父视图的点(x,y)处,注意此处的x和y是根据父视图的坐标系来定的。
view.scrollBy(x,y)  x代表横向移动的距离,y代表纵向移动的距离

view.getScrollX
view.getScrollY
将整个父视图的左上角定为(0,0),那么子view.getScrollX会获取到屏幕左边缘减去父视图的左边缘为0的距离,特别当滑屏时,父视图会被迫隐藏一部分,因为屏幕的大小是固定的。getScrollY以此类推。

event.getX()
event.getY()
相对父视图左上角(0,0)触摸点的坐标值。

Scroller.getCurrY()
Scroller.getCurrX()
该方法拿横轴来说,代表屏幕的左边缘离父视图的左边缘的距离。

Scroller.startScroll(int startX, int startY, int dx, int dy) 
四个参数分别表示起点的坐标和滑动的向量,即从(startX,startY)开始滑动,横向滑动dx的距离,纵向滑动dy的距离(正值向左滑,负值向右滑),而这里的startX,startY又是参照的父视图左上角为原点坐标的坐标系,滑屏时经常使用getScrollX()和getScrollY()来代表屏幕左边缘和上边缘处于父视图坐标系的具体位置

http://blog.csdn.net/lvxiangan/article/details/19971509

posted @ 2016-07-21 16:30  Chen狼图腾  阅读(186)  评论(0)    收藏  举报