1. 程式人生 > >Android View api 詳解-LocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect

Android View api 詳解-LocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect

概述

View 是很多控制元件的父類,因此掌握了 View api 有助於掌握其它控制元件。
掌握LocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect的關鍵點:獲得View在螢幕中的絕對位置

這裡寫圖片描述

getLocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect

getLocationInWindow

int[] position = new int[2]; 
textview.getLocationInWindow(position); 
System.out
.println("getLocationInWindow:" + position[0] + "," + position[1]);

這個方法是將View的左上角座標存入陣列中.
此座標是相對當前activity而言.
若是普通activity,則y座標為可見的狀態列高度+可見的標題欄高度+view左上角到標題欄底部的距離.
可見的意思是:在隱藏了狀態列/標題欄的情況下,它們的高度以0計算.
若是對話方塊式的activity,則y座標為可見的標題欄高度+view到標題欄底部的距離.
此時是無視狀態列的有無的.

getLocationOnScreen

int[] position = new
int[2]; textview.getLocationOnScreen(position); System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);

這個方法跟上面的差不多,也是將view的左上角座標存入陣列中.但此座標是相對整個螢幕而言.

y座標為View左上角到螢幕頂部的距離.

getGlobalVisibleRect

Rect viewRect = new Rect(); 
textview.getGlobalVisibleRect(viewRect); 
System.out
.println(viewRect);

這個方法是構建一個Rect用來”套”這個view.此Rect的座標是相對當前activity而言.
若是普通activity,則Rect的top為可見的狀態列高度+可見的標題欄高度+Rect左上角到標題欄底部的距離.
若是對話方塊式的activity,則y座標為Rect的top為可見的標題欄高度+Rect左上角到標題欄底部的距離.
此時是無視狀態列的有無的.

getGlobalVisibleRect

Rect rect = new Rect(); 
textview.getGlobalVisibleRect(rect); 
System.out.println(rect); 

這個方法是構建一個Rect用來”套”這個view.
此Rect的座標是相對當前activity而言.
若是普通activity,則Rect的top為可見的狀態列高度+可見的標題欄高度+Rect左上角到標題欄底部的距離.
若是對話方塊式的activity,則y座標為Rect的top為可見的標題欄高度+Rect左上角到標題欄底部的距離.
此時是無視狀態列的有無的.

getLocalVisibleRect

Rect rect = new Rect(); 
button.getLocalVisibleRect(rect); 
System.out.println(rect); 

getLocalVisibleRect的作用是獲取檢視本身可見的座標區域,座標以自己的左上角為原點(0,0).

注意:以上方法在OnCreate方法中呼叫,都會返回0,這是因為View還未載入完畢;本文中點選計算之後才開始獲取View的getLocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect值。

這裡寫圖片描述

注:rect轉化為String時第二個“,”變為“-”,從原始碼中可以看出
這裡寫圖片描述