天天看點

android應用程式中擷取view的位置

 我們重點在擷取view的y坐标,你懂的...

依次介紹以下四個方法:

1.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到标題欄底部的距離.

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

2.getlocationonscreen

textview.getlocationonscreen(position); 

system.out.println("getlocationonscreen:" + position[0] + "," + position[1]); 

這個方法跟上面的差不多,也是将view的左上角坐标存入數組中.但此坐标是相對整個螢幕而言.

y坐标為view左上角到螢幕頂部的距離.

3.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左上角到标題欄底部的距離.

4.getlocalvisiblerect

rect globerect = new rect(); 

button.getlocalvisiblerect(globerect); 

注意:

以上方法在oncreate方法中調用,都會傳回0,這是因為view還未加載完畢.

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

mtextview.post(new runnable() { 

    @override 

    public void run() { 

        rect viewrect = new rect(); 

        mtextview.getglobalvisiblerect(viewrect); 

        mtreescrollview.setrect(viewrect); 

    } 

}); 

這樣在view加載完畢之後會執行擷取位置的方法.

繼續閱讀