座標系在二維視圖中通過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開發藝術探索》的資料