Android 座标详解 View的XY座标 点击事件的XY座标 总结 DEMO 参考

如果想更深入了解自定义控件,那么我们对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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章