在真正的學習 Android 自定義 View之前, 我們先來了解一下 Android 的坐標系相關知識.
android 開發交流群: 190088567
一. 坐標系分類:
Android 中的坐標系可以分為三類: 屏幕坐標系, 布局坐標系, 以及視圖坐標系.
- 屏幕坐標系: 該坐標系是以屏幕的左上角為原點(0, 0), 水平向右代表 x 方向的正方向, 垂直向下代表 y方向的正方向, 如下圖所示:
- 布局坐標系: 該坐標系是以 view 的左上角為坐標原點, 水平向右代表 x 方向的正方向, 垂直向下代表 y 方向的正方向, view 的坐標原點是在 layout 布局過程中做確定的.
- 視圖坐標系: 該坐標系是在 view 繪制過程中, 繪制的內容將該坐標系作為參考, 來繪制 view.我們可以看下下面的這張圖片:
二. view 當中的方法:
- getTop():獲取 view 本身頂部到父容器 ViewGroup 頂部的距離.
- getBottom(): 獲取 view 本身底部到父容器 ViewGroup 頂部的距離.(注意這里是ViewGroup頂部)
- getLeft(): 獲取 view 本身左側到父容器 ViewGroup 左側的距離.
- getRight(): 獲取 view 本身右側到父容器 ViewGroup 左側的距離.(這里是ViewGroup左側)
上面的幾個方法所得到的值都是相對於父容器的, 而不是整個屏幕. - offsetLeftAndRight(int offset): 水平方向移動view, offset 為正則向右移動, offset 為負則向左移動
- offsetTopAndBottom(int offset): 垂直方向移動view, offset 為正則向下移動, offset 為負則向右移動
上面兩個方法中對應的 getLeft() 和 getTop() 返回的值會改變
在 Android3.0以后 view 又增加了一些關於 view 的屬性:
-
x, y: 標示 view 左上角的坐標, 坐標系是父 view 的視圖坐標, 其值為:
12x = mleft + tranlationXy = mtop + tranlationY -
translationX, translationY: 表示 view 位置的偏移量, 初始值為0
該坐標系主要用在 view 的動畫操作上面, 在后續的文章中會詳細介紹 android 中的動畫
三. MotionEvent當中的方法:(假設圖片中的小點就是我們手指觸摸在手機屏幕中的位置)
- getY(): view 本身頂部距離父容器頂部的距離
- getX(): view 本身左側距離父容器左側的距離
- getRawX(): view 本身左側距離手機屏幕左側的距離
- getRawY(): view 本身頂部距離手機屏幕頂部的距離
前兩個方法是相對於父容器而言的, 后兩個方法是相對於整個屏幕而言的, 這個地方不要弄混了
Android 中的坐標系相關知識是自定義 View 中的基礎知識, 也是為后續的學習做鋪墊, 本節內容相對來說也比較簡單, 不明白的地方可以留言或者加群(190088567),下篇文章我們將詳細講解 View 中的 Paint 相關知識.