View 坐標(biāo)系

View的位置參數(shù)

View的位置參數(shù)主要由它的四個(gè)頂點(diǎn)來決定,它們分別對(duì)應(yīng)View的四個(gè)屬性:top、left、bottom、right。其中top是左上角縱坐標(biāo),left是左上角橫坐標(biāo),bottom是右下角的縱坐標(biāo),right是右下角的橫坐標(biāo)。需要注意的是:這些坐標(biāo)都是相對(duì)于View的父容器來說的,這是一種相對(duì)坐標(biāo)。如圖所示:

764825-20170119211536609-541825432.png

這張圖非常清晰的表達(dá)了我們剛才表述的View相對(duì)位置的內(nèi)容,我們可以很容易的知道View的寬度就是right-left的值,當(dāng)然高度就是bottom-top。同時(shí)我們可以通過getLeft、getTop、getRight、getBottom來獲取left、top、right、bottom的值。

注意:
  從Android 3.0開始,View額外添加了x、y、translationX、translationY。其中x和y是View左上角的坐標(biāo),translationX和translationY是View左上角相對(duì)于父容器的偏移量。這幾個(gè)數(shù)值也是相對(duì)于父容器的坐標(biāo),并且translationX和translationY默認(rèn)值都是0。這幾個(gè)參數(shù)的換算關(guān)系如下:
  1、x=left+translationX;
  2、y=top+translationY;
  主要注意的是:View在移動(dòng)過程中,top和left表示的是原始左上角的位置信息,其值不會(huì)發(fā)生改變。此時(shí)發(fā)生改變的是x、y、translationX、translationY。
  1、view.getTranslationX計(jì)算的是該view的偏移量。初始值為0,向左偏移值為負(fù),向右偏移值為正。
  2、view.getX相當(dāng)于該view距離父容器左邊緣的距離,等于getLeft+getTranslationX。

如圖所示:


764825-20170119213934359-775850732.png

我們看到左側(cè)的圖片是初始情況下的。這時(shí)候translationX和translationY都是0。第二張圖我們將View向右側(cè)移動(dòng)X個(gè)位置,我們通過上面的分析知道left、top的值都沒有改變。改變的是translationX。

再談?wù)剅awX

rawX是絕對(duì)坐標(biāo),是相對(duì)于屏幕左上角的橫坐標(biāo),view本身沒有g(shù)etRawX的方法,這個(gè)方法一般在MotionEvent對(duì)象里使用。

如圖所示:

764825-20170120100053531-1937595394.png

最后總結(jié):

View獲取自身寬高
getHeight():獲取View自身高度
getWidth():獲取View自身寬度

View自身坐標(biāo)
通過如下方法可以獲得View到其父控件(ViewGroup)的距離:
getTop():獲取View自身頂邊到其父布局頂邊的距離
getLeft():獲取View自身左邊到其父布局左邊的距離
getRight():獲取View自身右邊到其父布局左邊的距離
getBottom():獲取View自身底邊到其父布局頂邊的距離

MotionEvent提供的方法
我們看上圖那個(gè)深藍(lán)色的點(diǎn),假設(shè)就是我們觸摸的點(diǎn),我們知道無論是View還是ViewGroup,最終的點(diǎn)擊事件都會(huì)由onTouchEvent(MotionEvent event)方法來處理,MotionEvent也提供了各種獲取焦點(diǎn)坐標(biāo)的方法:

getX():獲取點(diǎn)擊事件距離控件左邊的距離,即視圖坐標(biāo)
getY():獲取點(diǎn)擊事件距離控件頂邊的距離,即視圖坐標(biāo)
getRawX():獲取點(diǎn)擊事件距離整個(gè)屏幕左邊距離,即絕對(duì)坐標(biāo)
getRawY():獲取點(diǎn)擊事件距離整個(gè)屏幕頂邊的的距離,即絕對(duì)坐標(biāo)

原文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容