scrollTo/scrollBy 使用詳解

在android中每一個(gè)view里都有這兩個(gè)方法幻捏,所以理論上所有的view都是可以滑動(dòng)的醋奠。

關(guān)于這兩者沛善,官網(wǎng)上是這樣說(shuō)的:

這兩者的介紹只有一字之差哄啄,一個(gè)是“move”轧葛,一個(gè)是“set”,因此芳杏,我的理解是scrollTo是相對(duì)于view的初始位置的空幻,是不會(huì)變的。而scrollBy是相對(duì)于當(dāng)前位置的,位置一直是移動(dòng)的士袄。

這里寫(xiě)一個(gè)demo如下:

   public void btnClick(View view) {
    switch (view.getId()) {
        case R.id.scrollerToBtn:
            //scrollTo相對(duì)于view的初始位置移動(dòng),所以這里view無(wú)論點(diǎn)擊多少次赤拒,都只會(huì)相對(duì)于view的初始位置移動(dòng)一定距離。
            mLayout.scrollTo(getResources().getDimensionPixelSize(R.dimen.a), getResources().getDimensionPixelSize(R.dimen.b));
            break;
        case R.id.scrollerByBtn:
            //scrollBy相對(duì)于view的當(dāng)前位置移動(dòng)蝙茶,所以此處view是每點(diǎn)擊一次就向右下角移動(dòng)一次的隆夯。
            mLayout.scrollBy(getResources().getDimensionPixelSize(R.dimen.a), getResources().getDimensionPixelSize(R.dimen.b));
            break;
    }
}

布局文件也就是兩個(gè)按鈕畸肆,這里需要注意下如果scrollTo()里直接寫(xiě)int型的像素值的話(huà),編輯器可能會(huì)報(bào)錯(cuò)(運(yùn)行正常)。建議寫(xiě)在dimen.xml文件里,也便于維護(hù)厦瓢。

我們?cè)賮?lái)看看view里的scrollTo/scrollBy的源碼是如何使用的浙垫。

/**
 * Set the scrolled position of your view. This will cause a call to
 * {@link #onScrollChanged(int, int, int, int)} and the view will be
 * invalidated.
 *
 * @param x the x position to scroll to
 * @param y the y position to scroll to
 */
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();
        }
    }
}

/**
 * Move the scrolled position of your view. This will cause a call to
 * {@link #onScrollChanged(int, int, int, int)} and the view will be
 * invalidated.
 *
 * @param x the amount of pixels to scroll by horizontally
 * @param y the amount of pixels to scroll by vertically
 */
public void scrollBy(int x, int y) {
    scrollTo(mScrollX + x, mScrollY + y);
}

實(shí)際上封拧,scrollBy是內(nèi)部就是調(diào)用了scrollTo的味抖,實(shí)現(xiàn)了基于當(dāng)前位置的相對(duì)滑動(dòng),而scrollTo則是實(shí)現(xiàn)了“絕對(duì)滑動(dòng)”灰粮。 需要注意的一點(diǎn)就是mScrollX/mScrollY這兩個(gè)屬性的規(guī)則仔涩,mScrollX表示的是view的左邊緣到view的內(nèi)容的左邊緣的水平距離,類(lèi)似的粘舟,mScrollY表示的是view的上邊緣與view內(nèi)容的上邊緣的豎直方向的距離熔脂。

基于scrollTo/scrollBy的特性,我們可以很容易的利用它們來(lái)實(shí)現(xiàn)view的滑動(dòng)柑肴,解決一些常見(jiàn)的問(wèn)題霞揉,比如,登陸界面的鍵盤(pán)遮擋輸入框的問(wèn)題晰骑。但是需要注意的是适秩,使用這兩個(gè)方法進(jìn)行view的滑動(dòng),只能對(duì)view的內(nèi)容進(jìn)行滑動(dòng)硕舆,對(duì)于view本身并不能滑動(dòng)隶症。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岗宣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淋样,老刑警劉巖耗式,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刊咳,警方通過(guò)查閱死者的電腦和手機(jī)彪见,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娱挨,“玉大人余指,你說(shuō)我怎么就攤上這事□伟樱” “怎么了酵镜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)柴钻。 經(jīng)常有香客問(wèn)我淮韭,道長(zhǎng),這世上最難降的妖魔是什么贴届? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任靠粪,我火速辦了婚禮,結(jié)果婚禮上毫蚓,老公的妹妹穿的比我還像新娘占键。我一直安慰自己,他們只是感情好元潘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布畔乙。 她就那樣靜靜地躺著,像睡著了一般柬批。 火紅的嫁衣襯著肌膚如雪啸澡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天氮帐,我揣著相機(jī)與錄音嗅虏,去河邊找鬼。 笑死上沐,一個(gè)胖子當(dāng)著我的面吹牛皮服,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播参咙,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龄广,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蕴侧?” 一聲冷哼從身側(cè)響起择同,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎净宵,沒(méi)想到半個(gè)月后敲才,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體裹纳,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年紧武,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剃氧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阻星,死狀恐怖朋鞍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妥箕,我是刑警寧澤滥酥,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站矾踱,受9級(jí)特大地震影響恨狈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呛讲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一禾怠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贝搁,春花似錦吗氏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膀哲,卻和暖如春往产,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背某宪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工仿村, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兴喂。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓蔼囊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衣迷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畏鼓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 什么是View View 是 Android 中所有控件的基類(lèi)。 View的位置參數(shù) View 的位置由它的四個(gè)頂...
    acc8226閱讀 1,170評(píng)論 0 7
  • 第3章 View的事件體系 [TOC] 3.1 View基礎(chǔ)知識(shí) 1. View的位置參數(shù) 首先來(lái)認(rèn)識(shí)一下View...
    反復(fù)橫跳的龍?zhí)?/span>閱讀 924評(píng)論 0 5
  • 目前移動(dòng)設(shè)備流行壶谒,我們要在如此小的屏幕上盡可能給用戶(hù)展現(xiàn)更多的內(nèi)容云矫,就需要在應(yīng)用上通過(guò)滑動(dòng)來(lái)顯示和隱藏部分內(nèi)容,V...
    shenhuniurou閱讀 968評(píng)論 2 1
  • “韓國(guó)電影有那么好嗎汗菜?” 千萬(wàn)不要把韓國(guó)電影和韓國(guó)電視劇聯(lián)想到一塊让禀,雖然棒子的電視劇也不乏精品贵少,但其矯揉造作之感實(shí)...
    曲有誤周郎顧87閱讀 1,844評(píng)論 1 3
  • 【聲明:】本文是作者(蘑菇v5)原創(chuàng),版權(quán)歸作者 蘑菇v5所有堆缘,侵權(quán)必究。本文首發(fā)在簡(jiǎn)書(shū)普碎。如若轉(zhuǎn)發(fā)吼肥,請(qǐng)注明作者和來(lái)...
    蘑菇v5閱讀 261評(píng)論 0 0