android View coordinate(座標)


座標系在二維視圖中通過X軸和Y軸兩個數字爲組合表示某個點的絕對座標。

例如(30, 100) 通常表示X軸30, Y軸100交叉的一個點。


1.View的位置主要是由它的四個頂點來決定的,分別對應:left、top、right、bottom,top是左上角的縱座標,left是左上角的橫座標,

bottom是右下角的縱座標,right是右下角的橫座標,這些都是相對於View的父容器來說的,是相對座標,x軸與y軸的正方向是右和下,如圖所示:




視圖左側位置 left = view.getLeft()


視圖右側位置 right = view.getRight()


視圖頂部位置 top = view.getTop();


視圖底部位置 bottom = view.getBottom();


視圖寬度 width =view.getWidth();


視圖高度 height = view.getHeight()


View的寬高與座標關係:

width = right - left 

height =bottom - top


2. 從Android 3.0開始,View新增加了幾個參數:x  、 y 、  translationX  、 translationY 這幾個參數也都是相對於父容器的相對座標。x 和y 表示View 左上角的座標,translationX和translationY是View左上角相對於父容器的偏移量,簡單講就是沿x軸,y軸移動的距離。translationX和translationY的默認值是0。幾個參數的換算關係:


x = left +  translationX ;  如上圖 x = left  ,translationX =0;


y =top +  translationY;   如上圖 y = top ,translationY =0;


補充說明:View 在平移過程中,top 、left表示的是原始左上角的位置信息,其值並不會發生改變,此時放生改變的是x  、 y 、  translationX  、 translationY 四個參數。



3.在MotionEvent事件中,我們可以獲得點擊事件發生的x和y座標。系統提供了兩組方法:getX/getY、getRawX/getRawY。getX/getY返回的是相對於當前View 左上角的x和y座標(相對座標),getRawX/getRawY返回的是相對於手機屏幕左上角的x和y座標(絕對座標)。


4. 在View滑動過程中,使用scrollTo和scrollBy實現滑動(這裏的滑動只是View內容的滑動,並不能改變View在佈局中的位置,類似於View動畫的效果)我們可以獲取mScrollX和mScrollY值,通過getScrollX/getScrollY獲取。

getScrollX/getScrollY返回的是View內容的位置相對View佈局的位置發生的偏移量。mScrollX的值等於View左邊緣到View內容的左邊緣的水平距離。View內容的左邊緣在View左邊緣的左邊時,mScrollX爲正值,從右向左滑動,反之負值;mScrollY值等於View上邊緣到View內容上邊緣的垂直距離。View內容的上邊緣在View上邊緣的上邊時,mScrollY爲正值,從下往上移動,反之負值。

如下:綠色方塊代表View的內容位置,灰色方塊代表的是View在父容器的位置,綠色前頭代表的是滑動的方向和距離。




5.常用獲取座標方法

 獲取在當前窗口內的絕對座標

View.getLocationInWindow()

獲取在整個屏幕內的絕對座標,注意這個值是要從屏幕頂端算起,也就是包括了通知欄的高度。

View.getLocationOnScreen()

下面一組是獲取相對在它父窗口裏的座標。

View.getLeft() , View.getTop(), View.getBottom(), View.getRight()

View.getLocationInWindow()和 View.getLocationOnScreen()在window佔據全部screen時,返回值相同,不同的典型情況是在Dialog中時。當Dialog出現在屏幕中間時,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。

實例:


int[] location = new int[2] ;

view.getLocationInWindow(location); 

view.getLocationOnScreen(location);

注意:location[0]代表x座標,location [1] 代表 座標,使用該方法時一定是在View測量完成後,不然值爲0.



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


文章內容大量參考了《Android開發藝術探索》的資料








發佈了34 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章