在我們Android開(kāi)發(fā)過(guò)程中經(jīng)常使用到獲取View坐標(biāo)的方式做相關(guān)的邏輯判斷,主要是用到一下幾種方法:
1. getLeft()末融、getTop()、getRight()、getBottom()
2. getX()键袱、getY()、getRawX()摹闽、getRawY()
3. getLocationOnScreen()
4. getLocationInWindow()
5. getGlobalVisibleRect()
6. getLocalVisibleRect()
方式1:getLeft()蹄咖、getTop()、getRight()付鹿、getBottom()
1. 應(yīng)用場(chǎng)景
獲得 View 相對(duì) 父View 的坐標(biāo)
2. 使用
view.getLeft();
view.getTop();
view.getRight();
view.getBottom();
3. 具體描述
View的位置由4個(gè)頂點(diǎn)決定的(如下A澜汤、B蚜迅、C、D)
4個(gè)頂點(diǎn)的位置描述分別由4個(gè)值決定:(請(qǐng)記卓〉帧:View的位置是相對(duì)于父控件而言的)
方式2:getX()谁不、getY()、getRawX()徽诲、getRawY()
1. 應(yīng)用場(chǎng)景
獲得點(diǎn)擊事件處 相對(duì)點(diǎn)擊控件 & 屏幕的坐標(biāo)
2. 使用
該方式是通過(guò)motionEvent獲取的
motionEvent event;
event.getX();? ? ?
event.getY();
event.getRawX();? ?
event.getRawY();
3. 具體介紹
方式3:getLocationInWindow()
1. 應(yīng)用場(chǎng)景
獲取控件 相對(duì) 窗口Window 的位置
2. 具體使用
int[] location = new int[2];
view.getLocationInWindow(location);
int x = location[0]; // view距離window 左邊的距離(即x軸方向)
int y = location[1]; // view距離window 頂邊的距離(即y軸方向)
// 注:要在onWindowFocusChanged()里獲取刹帕,即等window窗口發(fā)生變化后
3. 示意圖
方式4:getLocationOnScreen()
1. 應(yīng)用場(chǎng)景
獲得 View 相對(duì) 屏幕 的絕對(duì)坐標(biāo)
2. 使用
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0]; // view距離 屏幕左邊的距離(即x軸方向)
int y = location[1]; // view距離 屏幕頂邊的距離(即y軸方向)
// 注:要在view.post(Runable)里獲取,即等布局變化后
3. 示意圖
方式5:getGlobalVisibleRect()
1. 應(yīng)用場(chǎng)景
View可見(jiàn)部分 相對(duì)于 屏幕的坐標(biāo)谎替。
2. 具體使用
Rect globalRect = new Rect();
view.getGlobalVisibleRect(globalRect);
globalRect.getLeft();
globalRect.getRight();
globalRect.getTop();
globalRect.getBottom();
3. 示意圖
方式6:getLocalVisibleRect()
1. 應(yīng)用場(chǎng)景
View可見(jiàn)部分 相對(duì)于 自身View位置左上角的坐標(biāo)偷溺。
2. 具體使用
Rect localRect = new Rect();
view.getLocalVisibleRect(localRect);
localRect.getLeft();
localRect.getRight();
localRect.getTop();
localRect.getBottom();
3. 示意圖
總結(jié)
本文對(duì)Android獲取View坐標(biāo)位置的方式進(jìn)行了全面講解,總結(jié)如下:
參考https://blog.csdn.net/carson_ho/article/details/103342511