天天看點

自定義View基礎-坐标系

一.螢幕坐标系和數學坐标系的差別

由于移動裝置一般定義螢幕左上角為坐标原點,向右為x軸增大方向,向下為y軸增大方向, 是以在手機螢幕上的坐标系與數學中常見的坐标系是稍微有點差别的,詳情如下:

(PS:其中的∠a 是對應的,注意y軸方向!)

自定義View基礎-坐标系
自定義View基礎-坐标系

實際螢幕上的預設坐标系如下:

PS: 假設其中棕色部分為手機螢幕
自定義View基礎-坐标系

二.View的坐标系

注意:View的坐标系統是相對于父控件而言的.

getTop();       //擷取子View左上角距父View頂部的距離
getLeft();      //擷取子View左上角距父View左側的距離
getBottom();    //擷取子View右下角距父View頂部的距離
getRight();     //擷取子View右下角距父View左側的距離
                    
  
   getTop為例,函數源代碼為:
  
  
   /**
* Top position of this view relative to its parent.
*相對應父控件的top位置,機關為像素,即頭部到父控件的距離
* @return The top of this view, in pixels.
*/ 
@ViewDebug.CapturedViewProperty 
public final int getTop() { 
    return mTop; 
}  
  
              

如下圖所示:

自定義View基礎-坐标系

三.MotionEvent中 get 和 getRaw 的差別

event.getX();       //觸摸點相對于其所在元件坐标系的坐标
event.getY();

event.getRawX();    //觸摸點相對于螢幕預設坐标系的坐标
event.getRawY();
           

如下圖所示:

PS:其中相同顔色的内容是對應的,其中為了顯示友善,藍色箭頭向左稍微偏移了一點.
自定義View基礎-坐标系

四.核心要點

序号 要點
1 在數學中常見的坐标系與螢幕預設坐标系的差别
2 View的坐标系是相對于父控件而言的
3 MotionEvent中get和getRaw的差別