View坐標(biāo)系

1-1View坐標(biāo)系

1-2父View移出屏幕后子View的getLeft()值

1.View靜態(tài)坐標(biāo)

View坐標(biāo) 參數(shù)含義
Left = getLeft(); View自身左側(cè)到父View左側(cè)的距離
Top = getTop(); View自身頂部到父View頂部的距離
Right = getRight(); View自身右側(cè)到父View左側(cè)的距離
Bottom = getBottom(); View自身底部到父View頂部的距離
getTranslationX() View左上角相對父View的X軸偏移量
getTranslationY() View左上角相對父View的Y軸偏移量
getX() 值為getLeft()+getTranslationX()球拦,當(dāng)setTranslationX()時getLeft()不變拄轻,getX()變。
getY() 值為getTop()+getTranslationY(),當(dāng)setTranslationY()時getTop()不變鲤氢,getY()變飘痛。

MotionEvent觸摸事件坐標(biāo)、

MotionEvent坐標(biāo)方法 參數(shù)含義
getX() 當(dāng)前觸摸點(diǎn)距離當(dāng)前View自身左邊的距離
getY() 當(dāng)前觸摸點(diǎn)距離當(dāng)前View自身頂部的距離
getRawX() 當(dāng)前觸摸點(diǎn)距離屏幕左邊的距離(Android絕對坐標(biāo)系)
getRawY() 當(dāng)前觸摸點(diǎn)距離屏幕頂部的距離(Android絕對坐標(biāo)系)

2.View中的滑動坐標(biāo)系

Paste_Image.png
View滑動坐標(biāo) 參數(shù)含義
offsetLeftAndRight(int offset) 水平方向挪動View灵奖,offset為正則x軸正向移動嚼沿,移動的是整個View,getLeft()會變的瓷患,自定義View很有用骡尽。
offsetTopAndBottom(int offset) 垂直方向挪動View,offset為正則y軸正向移動擅编,移動的是整個View攀细,getTop()會變的,自定義View很有用爱态。
scrollTo(int x, int y) View中內(nèi)容(不是整個View)滑動到相應(yīng)的位置辨图,參考坐標(biāo)原點(diǎn)為ParentView左上角,x肢藐,y為正則向xy軸反方向移動故河,反之同理。
scrollBy(int x, int y) 在scrollTo()的基礎(chǔ)上繼續(xù)滑動xy吆豹。
setScrollX(int value) 實(shí)質(zhì)為scrollTo()鱼的,只是改變X軸滑動。
setScrollY(int value) 實(shí)質(zhì)為scrollTo()痘煤,只是改變Y軸滑動凑阶。
getScrollX()/getScrollY() 獲取當(dāng)前滑動位置偏移量。分別對應(yīng)著mScrollX衷快、mScrollY宙橱。mScrollX的值總是等于View左邊緣和View內(nèi)容左邊緣在水平方向的距離,mScrollY的值總是等于View的上邊緣和View內(nèi)容上邊緣在豎直方向的距離蘸拔。View邊緣指View的位置师郑,有四個頂點(diǎn)組成,Left调窍、Top宝冕、Right、Bottom邓萨。所以該值的參考坐標(biāo)系是父View的左上角地梨。

mScrollX = getLeft()-mContentDistanceX;
mScrollY = getTop()-mContentDistanceY;

(mContentDistanceX和mContentDistanceY分別是View的內(nèi)容在X軸菊卷、Y軸滑動的距離)
mScrollX和mScrollY的單位為像素,并且當(dāng)View左邊緣(getLeft())在View內(nèi)容左邊緣的右邊時宝剖,mScrollX為正值洁闰,反之為負(fù)值;當(dāng)View上邊緣(getTop())在View內(nèi)容上邊緣的下邊時万细,mScrollY為正值扑眉,反之為負(fù)值。
同理雅镊,調(diào)用View的scrollBy()和scrollTo()方法時參數(shù)傳遞正數(shù)襟雷,卻想坐標(biāo)系負(fù)方向移動。
源碼分析:

public void scrollTo(int x, int y) {
    if (mScrollX != x || mScrollY != y) {
        int oldX = mScrollX; 
        int oldY = mScrollY; 
        mScrollX = x; 
        mScrollY = y; 
        invalidateParentCaches(); 
        onScrollChanged(mScrollX, mScrollY, oldX, oldY); 
        if (!awakenScrollBars()) {
             postInvalidateOnAnimation();
         } 
    }
}

View的該方法注釋里明確說明了調(diào)運(yùn)他會觸發(fā)onScrollChanged()和invalidated()方法仁烹,那我們就將矛頭轉(zhuǎn)向invalidated()方法觸發(fā)的draw()過程耸弄,draw()過程中最終其實(shí)會觸發(fā)下面的invalidate()方法,如下:

public void invalidate(int l, int t, int r, int b) {
    final int scrollX = mScrollX;
    final int scrollY = mScrollY; //scroller時為何參數(shù)和坐標(biāo)反向的真實(shí)原因
    invalidateInternal(l - scrollX, t - scrollY, r - scrollX, b - scrollY, true, false);
}

invalidate()的四個參數(shù)分別是View的Left卓缰、Top计呈、Right和Bottom,代碼中mScrollX和mScrollY征唬。l-scrollX捌显,當(dāng)scrollX為負(fù)時,l-scrollx > l,此時View內(nèi)容的左邊緣在view左邊緣的右側(cè)总寒,同理說明scrollX扶歪、scrollY傳負(fù)值時,View的內(nèi)容往坐標(biāo)系正值方向移動摄闸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末善镰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子年枕,更是在濱河造成了極大的恐慌炫欺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熏兄,死亡現(xiàn)場離奇詭異品洛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摩桶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門桥状,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人典格,你說我怎么就攤上這事岛宦。” “怎么了耍缴?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵砾肺,是天一觀的道長。 經(jīng)常有香客問我防嗡,道長变汪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任蚁趁,我火速辦了婚禮裙盾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘他嫡。我一直安慰自己番官,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布钢属。 她就那樣靜靜地躺著徘熔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淆党。 梳的紋絲不亂的頭發(fā)上酷师,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音染乌,去河邊找鬼山孔。 笑死,一個胖子當(dāng)著我的面吹牛荷憋,可吹牛的內(nèi)容都是我干的台颠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼勒庄,長吁一口氣:“原來是場噩夢啊……” “哼串前!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锅铅,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤酪呻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盐须,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玩荠,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年贼邓,在試婚紗的時候發(fā)現(xiàn)自己被綠了阶冈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡塑径,死狀恐怖女坑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情统舀,我是刑警寧澤匆骗,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布劳景,位于F島的核電站,受9級特大地震影響碉就,放射性物質(zhì)發(fā)生泄漏盟广。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一瓮钥、第九天 我趴在偏房一處隱蔽的房頂上張望筋量。 院中可真熱鬧,春花似錦碉熄、人聲如沸桨武。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呀酸。三九已至,卻和暖如春一姿,著一層夾襖步出監(jiān)牢的瞬間七咧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工叮叹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艾栋,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓蛉顽,卻偏偏與公主長得像蝗砾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子携冤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容