AndroidAndroid新收藏

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

上一篇 下一篇

猜你喜欢

热点阅读