本篇文章作爲Android自定義View的基礎,記錄一下相關的知識。
一、座標系
Android中的座標系總共分爲兩種,即Android座標系、View座標系
1.Android座標系
在Android中,將屏幕左上角的頂點作爲Android座標系的原點,向右是X軸正方向,向下是Y軸正方向。我們平時使用的getRawX()和geyRawY()這兩個方法獲取的座標也是Android座標系的座標。
2.View座標系
在Android系統中,View座標系與Android座標系同時存在,共同管理View,View座標系的原點默認在控件的左上角,向右是X軸正方向,向下是Y軸正方向。順便借個圖來理解一下。
二、獲取距離
1.View自身的座標通過如下方法可以得到View到其父控件(ViewGroup)的距離。
- getTop():獲取View自身頂邊到其父佈局頂邊的距離。
- getLeft():獲取View自身左邊到其父佈局左邊的距離。
- getRight():獲取View自身右邊到其父佈局右邊的距離。
- getBottom():獲取View自身底邊到其父佈局底邊的距離。
由此可得出,View的寬width=getLeft()-getRight(),高height=getBottom()-getTop()
2.MotionEvent提供的方法
假設上圖中小圓點是手指觸摸的點。無論是View還是ViewGroup,最終的點擊事件都會由onTouchEnent(MotionEvent event)方法來處理。MotionEvent在用戶交互中作用很大,內部提供了很多事件常亮,比如:ACTION_DOWN、ACTION_UP、ACTION_MOVE。
此外,MotionEvent也提供了獲取焦點座標的各種方法。
- getX():獲取點擊事件距離空間左邊的距離,即視圖座標。
- getY():獲取點擊事件距離空間頂邊的距離,即視圖座標。
- getRawX():獲取點擊事件距離整個屏幕左邊的距離,即絕對座標。
- getRawY():獲取點擊事件距離整個屏幕頂邊的距離,即絕對座標。