android應用程序中獲取view的位置

咱們重點在獲取view的y座標,你懂的...數組

依次介紹如下四個方法:ide

 

1.getLocationInWindowpost

 

Java代碼   收藏代碼
  1. int[] position = new int[2];  
  2. textview.getLocationInWindow(position);  
  3. System.out.println("getLocationInWindow:" + position[0] + "," + position[1]);  

 

 這個方法是將view的左上角座標存入數組中.此座標是相對當前activity而言.spa

如果普通activity,則y座標爲可見的狀態欄高度+可見的標題欄高度+view左上角到標題欄底部的距離.get

可見的意思是:在隱藏了狀態欄/標題欄的狀況下,它們的高度以0計算.string

如果對話框式的activity,則y座標爲可見的標題欄高度+view到標題欄底部的距離.it

此時是無視狀態欄的有無的.io

 

2.getLocationOnScreenclass

 

Java代碼   收藏代碼
  1. int[] position = new int[2];  
  2. textview.getLocationOnScreen(position);  
  3. System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);  

 這個方法跟上面的差很少,也是將view的左上角座標存入數組中.但此座標是相對整個屏幕而言.方法

 

y座標爲view左上角到屏幕頂部的距離.

 

 

3.getGlobalVisibleRect

 

Java代碼   收藏代碼
  1. Rect viewRect = new Rect();  
  2. textview.getGlobalVisibleRect(viewRect);  
  3. System.out.println(viewRect);  

 這個方法是構建一個Rect用來"套"這個view.此Rect的座標是相對當前activity而言.

如果普通activity,則Rect的top爲可見的狀態欄高度+可見的標題欄高度+Rect左上角到標題欄底部的距離.

如果對話框式的activity,則y座標爲Rect的top爲可見的標題欄高度+Rect左上角到標題欄底部的距離.

此時是無視狀態欄的有無的.

 

4.getLocalVisibleRect

 

Java代碼   收藏代碼
  1. Rect globeRect = new Rect();  
  2. button.getLocalVisibleRect(globeRect);  

這個方法得到的Rect的top和left都是0,也就是說,僅僅能經過這個Rect獲得View的寬度和高度....

 

 

注意:

以上方法在OnCreate方法中調用,都會返回0,這是由於View還未加載完畢.

建議在onWindowFocusChanged方法中進行獲取,有些狀況下onWindowFocusChanged很差用的時候(好比ActivityGroup),能夠這樣寫:

 

Java代碼   收藏代碼
  1. mTextView.post(new Runnable() {  
  2.     @Override  
  3.     public void run() {  
  4.         Rect viewRect = new Rect();  
  5.         mTextView.getGlobalVisibleRect(viewRect);  
  6.         mTreeScrollView.setRect(viewRect);  
  7.     }  
  8. });  

 這樣在View加載完畢以後會執行獲取位置的方法.

相關文章
相關標籤/搜索