1 引起疑惑
分析視圖invalidate流程的過程中發現view的left, right, top, bottom跟自己理解的不一樣,現在想分析一下這幾個值具體的含義。
2 理解坐標,位置概念
這里涉及坐標系的概念:
坐標系在二維視圖中通過X軸和Y軸兩個數字為組合表示某個點的絕對坐標。 例如(30, 100) 通常表示X軸30, Y軸100交叉的一個點
在Android中可以把left相當於X軸值, top相當於Y軸值, 通過這兩個值Android系統可以知道視圖的繪制起點,在通過Wdith 和 Height 可以得到視圖上下左右具體值,就可以在屏幕上絕對位置繪制視圖。right 與 bottom計算如下:
right = left + width;
bottom = top + height;
3 相應API
視圖左側位置 view.getLeft()
視圖右側位置 view.getRight()
視圖頂部位置 view.getTop();
視圖底部位置 view.getBottom();
視圖寬度 view.getWidth();
視圖高度 view.getHeight()
4 實例分析
按照我的理解:
藍色區域位置 left = 0, top = 0 坐標(0, 0 )
黃色區域位置 left = 60, top = 115 坐標(60, 115)
綠色區域位置 left = 115, top = 170 坐標(115, 170)
綠色區域,這里理解錯誤,我認為綠色區域的位置是針對於藍色區域的(0, 0)坐標的值,從上圖的右下角打印出的坐標值就可以看出與下方我列出的值不一致,看看下面的圖就明白了
總結: 視圖的left , top , right , bottom 的值是針對其父視圖的相對位置, 綠色區域是針對其父視圖(即黃色區域為(0, 0)點)的坐標,不應該是(115, 170 ) 而是 (55, 55)