android之View坐标系,获取坐标值,改变控件的位置

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

getLeft , getTop, getBottom, getRight, 这一组是获取相对在它父亲里的坐标
int[] location = new  int[2] ;
view.getLocationInWindow(location); //获取在当前窗口内的绝对坐标,当前activity显示的大小
view.getLocationOnScreen(location);//获取在整个屏幕内的绝对坐标,包括通知栏
location [0]--->x坐标,location [1]--->y坐标   

getLocationInWindow的使用见:  PopupWindow弹出窗口的使用

其实只要把下面这张图看明白就没问题了。

涉及到的方法一共有下面几个:

view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()    相对于父控件的距离   需要注意的是这四个方法获取的坐标表示的是 View 原始状态时相对于父容器的坐标,对 View 进行平移操作并不会改变着四个方法的返回值。

所以在使用ScrollView滑动到指定View的位置时,就可以这样做:

scrollView.smoothScrollTo(0, tagView.getTop());

//补充两个方法
//scrollView.fullScroll(ScrollView.FOCUS_DOWN);//滚到到底部
//scrollView.fullScroll(ScrollView.FOCUS_UP);//滚到到顶部

view获取自身宽高:getHeight(),getWidth()         高度=bottom-top      宽度=right - getLeft()

motionEvent获取坐标:getX(),getY(),   相对于父控件的坐标         getRawX(),getRawY() 相对于屏幕的坐标

首先是view的几个方法:

获取自身的宽高的这两个方法很清楚,不用多说,获取坐标的这几个就有点混乱了。

根据上面的图应该会比较容易明白,图中屏幕上放了一个ViewGroup布局,里面有个View控件

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

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

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

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

 

然后是motionEvent的方法:

getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离

getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离

getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离

getRawY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离

int newX =(int) event.getRawX();
int newY =(int) event.getRawY();
int dx = newX - startX;
int dy = newY - startY;
//窗体可以这样改变坐标位置:wm.updateViewLayout(); 图片可以改变layout
imageView.layout(iv.getLeft()+dx, iv.getTop()+dy, iv.getRight()+dx, iv.getBottom()+dy);

 

posted @ 2016-09-12 11:15  ts-android  阅读(18551)  评论(0编辑  收藏  举报