如果想更深入了解自定义控件,那么我们对Android的座标基础是有必要掌握的,针对这个我专门做了一个demo(文章最后有下载链接)了解所有
情况下的xy座标,那么接下来让我们直接进入主题
首先让我们先了解所需要的素材,为了让我们更好的了解xy,下文所有单位使用px(代码所有单位都是px的)
名称 | 简介 |
---|---|
状态栏区域 | 顶部是状态栏区域,有些座标方法是把状态栏包含进去的 |
程序区域 | 这是一个app应用程序区域 |
绿色ViewGroup | 用于做示范的viewGroup,宽度400px,高度100px |
紫色ViewGroup | 用于做示范的viewGroup,宽度400px,高度100px,唯一不同的是,往左边负向偏移了-300位置 |
View的XY座标
getX,getY
获得 View 相对 父View 的座标(请记住:View的位置是相对于父控件
而言的)
getLeft,getTop,getRight,getBottom
获取4个顶点的位置,分别由4个值决定,(请记住:View的位置是相对于父控件
而言的)
getWidth,getHeight
两个同样是宽度400px,100px。无论负偏移多少,都不会变
getLocationInWindow 和 getLocationOnScreen
该两者都表示可以用来获取一个控件的位置
如果是在普通的Activity,两者都是一样的
他们两者跟 getX/getY/getLeft/getTop 这些有点不一样,getLocationInWindow 和 getLocationOnScreen都是直接到达屏幕计算
请注意,
这个表格跟屏幕边距额外拉开了10px
而对于Dialog或者其他自定义的window窗口,两者不同
我们创建了一个Dialog,这个Dialog是新建的一个window,所以getLocationInWindow是获取的座标是该Dialog窗口内的座标,而getLocationOnScreen依然是获得在整个屏幕区域上的座标。
getLocationInWindow
getLocationInWindow
getGlobalVisibleRect
View可见部分 相对于 屏幕的座标
getLocalVisibleRect
View可见部分 相对于 自身View位置左上角的座标
点击事件的XY座标
当点击灰色方块的红色标记的位置时,会显示getX()和getRawX()的座标,可以看出他们的区别,getX是针对自身View的座标,而getRawX是针对屏幕的座标的
总结
View获取座标
方法 | 参考对象 |
---|---|
getX()、getY()、getRight()、getBottom() | 父View |
getLeft()、getTop()、getRight()、getBottom() | 父View |
getLocationInWindow | 窗口Wind(Dialog也算一个新的窗口) |
getLocationOnScreen | 屏幕左上角 |
getGlobalVisibleRect | 屏幕左上角 |
getLocalVisibleRect | 自身左上角 |
点击获取座标
方法 | 参考对象 |
---|---|
getX() | 当前触摸事件距离当前View左边的距离 |
getY() | 当前触摸事件距离当前View顶边的距离 |
getRawX() | 当前触摸事件距离整个屏幕左边的距离 |
getRawY() | 当前触摸事件距离整个屏幕顶边的距离 |
DEMO
https://github.com/zhongjhATC/ViewXYExample
参考
Android:你知道该如何正确获取View座标位置的方法吗?_专注分享 Android开发 干货-CSDN博客
Android getLocationInWindow和getLocationOnScreen的区别_柚子君的博客-CSDN博客
https://blog.csdn.net/yanbober/article/details/50419117