Android 坐标详解
2021-05-06 本文已影响0人
zhongjh
如果想更深入了解自定义控件,那么我们对Android的坐标基础是有必要掌握的,针对这个我专门做了一个demo(文章最后有下载链接)了解所有情况下的xy坐标,那么接下来让我们直接进入主题
首先让我们先了解所需要的素材,为了让我们更好的了解xy,下文所有单位使用px(代码所有单位都是px的)
布局初识
| 名称 | 简介 |
|---|---|
| 状态栏区域 | 顶部是状态栏区域,有些坐标方法是把状态栏包含进去的 |
| 程序区域 | 这是一个app应用程序区域 |
| 绿色ViewGroup | 用于做示范的viewGroup,宽度400px,高度100px |
| 紫色ViewGroup | 用于做示范的viewGroup,宽度400px,高度100px,唯一不同的是,往左边负向偏移了-300位置 |
View的XY坐标
getX,getY
获得 View 相对 父View 的坐标(请记住:View的位置是相对于父控件而言的)
image.png
image.png
getLeft,getTop,getRight,getBottom
获取4个顶点的位置,分别由4个值决定,(请记住:View的位置是相对于父控件而言的)
image.png
getWidth,getHeight
两个同样是宽度400px,100px。无论负偏移多少,都不会变
getLocationInWindow 和 getLocationOnScreen
该两者都表示可以用来获取一个控件的位置
如果是在普通的Activity,两者都是一样的
他们两者跟 getX/getY/getLeft/getTop 这些有点不一样,getLocationInWindow 和 getLocationOnScreen都是直接到达屏幕计算
image.png
请注意,
这个表格跟屏幕边距额外拉开了10px
image.png
而对于Dialog或者其他自定义的window窗口,两者不同我们创建了一个Dialog,这个Dialog是新建的一个window,所以getLocationInWindow是获取的坐标是该Dialog窗口内的坐标,而getLocationOnScreen依然是获得在整个屏幕区域上的坐标。
getLocationInWindow
getLocationInWindow
getLocationInWindow
getLocationInWindow
getGlobalVisibleRect
View可见部分 相对于 屏幕的坐标
image.png
image.png
getLocalVisibleRect
View可见部分 相对于 自身View位置左上角的坐标
image.png
image.png
点击事件的XY坐标
当点击灰色方块的红色标记的位置时,会显示getX()和getRawX()的坐标,可以看出他们的区别,getX是针对自身View的坐标,而getRawX是针对屏幕的坐标的
image.png
总结
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