1. 程式人生 > >獲取View類介面控制元件的位置

獲取View類介面控制元件的位置

  • 獲取在parent裡的相對座標位置

    這個比較簡單,不用多說,直接呼叫View的方法:getLeft , getTopgetBottomgetRight 獲得。

  • 取在螢幕中的絕對位置  
  1. getLocalVisibleRect
  2. getGlobalVisibleRect
  3. getLocationOnScreen
  4. getLocationInWindow

有一遍寫得不錯的文章,轉帖如下:(原文地址:http://www.fengfly.com/plus/view-209439-1.html)

=======================================================================

我們重點在獲取view的y座標,你懂的...

依次介紹以下四個方法:

1.getLocationInWindow

  1. int[] position = newint[2]; 

  2. textview.getLocationInWindow(position); 

  3. System.out.println("getLocationInWindow:" + position[0] + "," + position[1]); 

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

若是普通activity,則y座標為可見的狀態列高度+可見的標題欄高度+view左上角到標題欄底部的距離

.

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

若是對話方塊式的activity,則y座標為可見的標題欄高度+view到標題欄底部的距離.

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

2.getLocationOnScreen

  1. int[] position = newint[2]; 

  2. textview.getLocationOnScreen(position); 

  3. System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]); 

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

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

3.getGlobalVisibleRect

  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

  1. Rect globeRect = new Rect(); 

  2. button.getLocalVisibleRect(globeRect); 

注意:

以上方法在OnCreate方法中呼叫,都會返回0,這是因為View還未載入完畢.

建議在onWindowFocusChanged方法中進行獲取,有些情況下onWindowFocusChanged不好用的時候(比如ActivityGroup),可以這樣寫:

  1. mTextView.post(new Runnable() { 

  2.     @Override

  3.     publicvoid run() { 

  4.         Rect viewRect = new Rect(); 

  5.         mTextView.getLocalVisibleRect(viewRect); 

  6.         mTreeScrollView.setRect(viewRect); 

  7.     } 

  8. }); 

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

=======================================================================

PS:如何動態建立一個View類控制元件:

    1、通過new方法來建立一個介面物件;

    2、通過Layout xml資源來建立,利用LayoutInflater提供的方法。