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);