各種獲取控制項座標的方法總結

2021-08-06 05:42:49 字數 2727 閱讀 7696

最近遇到非常多需要獲取控制項在螢幕中位置的需求,用途有很多,比如一些拋物線動畫的起始點、popupwindow的顯示位置、scrollview中用於滑動跳轉到固定位置等,這裡總結一下:

1.獲取螢幕的大小

windowmanager manager = (windowmanager) getsystemservice(context.window_service);

int width = manager.getdefaultdisplay().getwidth();

int heigh = manager.getdefaultdisplay().getheight();

//第二種

windowmanager manager1 = this.getwindowmanager();

int width1 = manager1.getdefaultdisplay().getwidth();

int heigh1 = manager1.getdefaultdisplay().getheight();

//第三種

windowmanager manager2 = this.getwindowmanager();

displaymetrics outmetrics = new displaymetrics();

manager.getdefaultdisplay().getmetrics(outmetrics);

int width3 = outmetrics.widthpixels

; int height3 = outmetrics.heightpixels

;//第四種

resources resources = this.getresources();

displaymetrics dm = resources.getdisplaymetrics();

float density = dm.density

; int width4 = dm.widthpixels

; int height4 = dm.heightpixels

;

日誌輸出:

其中方法一和二過時了,建議使用後兩個,density 為螢幕密度。

2.獲取控制項的位置

int location = new

int[2];

v.getlocationonscreen(location);

int x = location[0];

int y = location[1];

//第二種

int location1 = new

int[2];

v.getlocationinwindow(location1);

int x1 = location[0];

int y1 = location[1];

getlocationonscreen獲取在整個螢幕內的絕對座標,注意這個值是要從螢幕頂端算起,也就是包括了通知欄的高度。getlocationinwindow獲取在當前視窗內的絕對座標.

getlocationinwindow()和 getlocationonscreen()在window佔據全部screen時,返回值相同,不同的典型情況是在dialog中時。當dialog出現在螢幕中間時,view.getlocationonscreen()取得的值要比view.getlocationinwindow()取得的值要大。

這裡需要注意的是:如果在oncreate中去獲取控價的位置得到的都是0,原因是因為此時控制項還沒有載入完。

這裡有個全面點的文章可以參考

3.獲取控制項的寬高

控制項寬高有view.getwidth()和view.getheight(),但是這兩個方法在oncreate()方法裡同樣得到的都是0,先找到幾種方式:

@override

public

void

onwindowfocuschanged(boolean hasfocus)

begin.post(new runnable() 

});

int w = view.measurespec

.makemeasurespec(0,

view.measurespec

.unspecified);

int h = view.measurespec

.makemeasurespec(0,

view.measurespec

.unspecified);

begin.measure(w, h);

int btwidth = begin.getmeasuredwidth();

int btheight = begin.getmeasuredheight();

第一種重寫onwindowfocuschanged方法,第二三種都是可以在oncreate裡獲取到寬高的。

C winform控制項的各種座標獲取

窗體的formborderstyle可以設定以下的值,每個值導致窗體的邊框的寬度不一樣,但是可以發現的是左 右 下邊框的寬度是一樣的 摘要 指定窗體的邊框樣式。comvisible true public enum formborderstyle 可以通過clientsize獲取工作區的大小,即窗體...

Animation過程中座標的獲取方法

android 的tween動畫並不會改變控制項的屬性值,比如以下測試片段 定義乙個從螢幕右邊進入,滾動到螢幕左邊消失的乙個translateanimation動畫 xml version 1.0 encoding utf 8 set xmlns android android fillenable...

獲取 設定控制項座標

獲取座標的方法 getlocationonscreen 計算該檢視在全域性座標系中的x,y值,注意這個值是要從螢幕頂端算起,也就是索包括了通知欄的高度 獲取在當前螢幕內的絕對座標 getlocationinwindow 計算該檢視在它所在的widnow的座標x,y值,獲取在整個視窗內的絕對座標 ge...