Android中的坐标系

来源:互联网 发布:龙神的淘宝店 编辑:程序博客网 时间:2024/06/05 15:51

Android坐标系和视图坐标系

    (1)Android坐标系

      先来看一看Android坐标系是个什么样子的。贴一张图来说明,如下:

 

     如上图所示,Android坐标系以手机屏幕左上角的顶点为坐标原点,从该点向右为x轴正方向,从该点向下为y轴正方向。而触控事件中,使用getRawX()和getRawY()方法

获取的坐标就是以这个坐标系为标准下的坐标值。

    (2)视图坐标系

    android中的另外一个坐标系叫做视图坐标系,它描述的是子视图在父视图中的位置。再贴一张图来说明,如下:

 

      如上图所示,视图坐标系是以父视图的左上角为坐标原点的。相应的原点向右为x轴正方向,原点向下为y轴正方向。在触控中,通过

getX()和getY()来获取的坐标值就是视图坐标系中的坐标值。

 

 

获取坐标值以及相对距离的那些方法

      在android中,提供了非常丰富的方法来获得坐标值和相对距离。但是在使用这些方法的时候,一定要清楚是以哪个坐标系为标准来获取的。

为了将这些方法一一说明清楚,我也准备了一张图,如下:

     上面的那张图很好的说明了每个方法获得的坐标值或者距离都是从哪里到哪里的。说明一下,图中有三个黑色的框框,最外层的是手机屏幕,

中间层的是ViewGroup,最内层的是ViewGroup中放置的view。

     其实上图中标注的方法可以分为两类,一类是View提供的方法,一类是MotionEvent提供的方法。分别说明如下:

View提供的获取的坐标以及距离的方法:

getTop()           获取到的是view自身的顶边到其父布局顶边的距离

getLeft()           获取到的是view自身的左边到其父布局左边的距离

getRight()        获取到的是view自身的右边到其父布局左边的距离

getBottom()     获取到的是view自身底边到其父布局顶边的距离

 

 

MotionEvent提供的方法:

getX()       获取点击事件距离控件左边的距离,即视图坐标

getY()       获取点击事件距离控件顶边的距离,即视图坐标

getRawX()  获取到的是点击事件距离整个屏幕左边的距离,即绝对坐标

getRawY()  获取到的是点击事件距离整个屏幕顶边的距离,即绝对坐标


View在屏幕的位置

android.view.View.layout(int l, int t, int r, int b)    layout的过程就是确定View在屏幕上显示的具体位置,在代码中就是设置其成员变量mLeft,mTop,mRight,mBottom的值,这几个值构成的矩形区域就是该View显示的位置,不过这里的具体位置都是相对与父视图的位置


View的大小

视图宽度 view.getWidth();
视图高度 view.getHeight() ;
这两个方法获取的是该view的高和宽,仅仅在滑动的情况下,或者说该view的大小如果不发生变化,它的值是不会变的。
getMeasuredWidth();
getMeasuredHeight();
说到这里就不得不提getWidth()、getHeight()和getMeasuredWidth()、getMeasuredHeight()这两对函数之间的区别,getMeasuredWidth()、getMeasuredHeight()返回的是measure过程得到的mMeasuredWidth和mMeasuredHeight的值,而getWidth()和getHeight()返回的是mRight - mLeft和mBottom - mTop的值。


Android~获取view在屏幕中的位置

getLocalVisibleRect , 返回一个填充的Rect对象, 感觉是这个View的Rect大小,left,top取到的都是0

getGlobalVisibleRect , 获取全局坐标系的一个视图区域, 返回一个填充的Rect对象;该Rect是基于总整个屏幕的

getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 

getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗口内的绝对坐标 (不是很理解= =、)

getLeft , getTopgetBottomgetRight,  这一组是获取相对在它父亲里的坐标

**注**:如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些

example:

    int[] location = new int[2];
    v.getLocationOnScreen(location);
    int x = location[0];
    int y = location[1];



0 0
原创粉丝点击