我們自定義View寫(xiě)滑動(dòng)相關(guān)的實(shí)現(xiàn)時(shí)驹溃,經(jīng)常會(huì)碰到使用這個(gè)方法獲取到的值來(lái)作為彈性滑動(dòng)滑回原位置時(shí)的一些參數(shù),那這個(gè)函數(shù)獲取到的值到底是啥呢延曙?
看下官方文檔怎么說(shuō):
Return the scrolled left position of this view. This is the left edge of the displayed part of your view. You do not need to draw any pixels farther left, since those are outside of the frame of your view on screen.
翻譯:返回這個(gè)視圖滾動(dòng)到的左邊的位置豌鹤。這是你視圖展示部分的左邊界。你不需要繪制在更左的地方繪制任何像素點(diǎn)枝缔,因?yàn)檫@些內(nèi)容在屏幕上時(shí)再你的視圖框架之外的布疙。
可能一部分同學(xué)還是沒(méi)理解,那一張圖來(lái)結(jié)束這篇文章吧愿卸!
其中綠色的線和黃色的線均代表的是View在不同的位置getScrollX返回的值灵临,黑色的框代表的是畫(huà)布,當(dāng)顯示一個(gè)View時(shí),默認(rèn)情況是View的左邊跟畫(huà)布的x坐標(biāo)0位置對(duì)齊趴荸,然后當(dāng)你想顯示畫(huà)布超出View顯示范圍右邊的內(nèi)容時(shí)儒溉,向左滑動(dòng),其實(shí)這時(shí)候是View在向右滑動(dòng)发钝,也就是getScrollX返回的是正值顿涣,這里就可以理解為手指向左滑動(dòng),實(shí)際上是View相對(duì)于畫(huà)布坐標(biāo)0位置的向右滑動(dòng)來(lái)展示更右邊的內(nèi)容酝豪。
這里還有一根紅線涛碑,這里想跟大家分享一個(gè)實(shí)際場(chǎng)景,比如我想我的View實(shí)現(xiàn)ViewPager那種寓调,內(nèi)容滑動(dòng)超過(guò)多少時(shí)锌唾,滾動(dòng)到下一頁(yè)內(nèi)容锄码,這時(shí)我們應(yīng)該怎么來(lái)計(jì)算滑動(dòng)之后需要補(bǔ)上多少才能滑動(dòng)到下一頁(yè)呢夺英?這時(shí)我們可以通過(guò)View的寬度來(lái)減去兩次getScrollX的差值來(lái)計(jì)算。這里給大家一個(gè)建議滋捶,在進(jìn)行計(jì)算的時(shí)候痛悯,統(tǒng)一保證值為正數(shù),在最終滑動(dòng)的情況再根據(jù)實(shí)際想要滑動(dòng)的方向重窟,確定正負(fù)载萌。