最近遇到非常多需要獲取控制項在螢幕中位置的需求,用途有很多,比如一些拋物線動畫的起始點、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...