我們重點在擷取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加載完畢之後會執行擷取位置的方法.