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

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