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)