[android]ScrollTo、ScrollBy甸陌、Scroller,都給我滾!

一盐股、前言

這篇文章主要是講述Scroller的基礎(chǔ)使用钱豁。了解過(guò)的老鳥(niǎo)可以出門左轉(zhuǎn),不必浪費(fèi)時(shí)間啦~

先介紹下scrollTo()scrollBy()倆個(gè)方法疯汁。

ViewscrollTo()scrollBy() 方法

這倆方法有毛子用牲尺?通俗點(diǎn)就是讓view給老子滾…只是滾的姿態(tài)不同。
scrollTo(x,y)scrollBy(x,y)倆個(gè)方法滾的姿態(tài)有何不同呢?
可以這么分析:
scrollTo() ——>讓View從最初的地方到指定的地方去谤碳,也就是終點(diǎn)固定了的溃卡。
scrollBy() ——>讓View從現(xiàn)在的地方到指定的地方去,也就是永遠(yuǎn)沒(méi)有盡頭蜒简,終點(diǎn)是下一個(gè)起點(diǎn)瘸羡。


如果,你要聽(tīng)俗點(diǎn)的話:
scrollTo() ——>給老子滾搓茬,他就滾過(guò)去犹赖,下次滾,他會(huì)回來(lái)從頭滾卷仑。
scrollBy() ——>給老子滾峻村,他就滾,下次滾锡凝,他蠢起不會(huì)回頭粘昨,就一路滾到底。


scrollTo()scrollBy()就說(shuō)到這了窜锯。(不懂就私信张肾,咱私聊~)

注意:

  1. 倆個(gè)方法的參數(shù),是偏移量而不是坐標(biāo)衬浑“坪疲‘偏移量’是什么?不知道是不是就我一個(gè)腦殘第一次看到這三個(gè)字懵逼了半天工秩,就是移動(dòng)的量尸饺。
  2. 然而這倆個(gè)方法的滾,并不是真正的滾助币,因?yàn)榭床坏綕L的過(guò)程浪听,所以就有了Scroller這個(gè)類,可以讓他們滾的自然點(diǎn)平滑點(diǎn)
  3. 有一篇正兒八經(jīng)介紹這倆個(gè)類的博客: scrollTo 和 scrollBy 方法使用說(shuō)明

二眉菱、正文

聽(tīng)說(shuō)不上圖的技術(shù)文都是耍流氓:

Scroller的簡(jiǎn)單效果實(shí)現(xiàn)

首先按我的理解介紹下Scroller類.

控制一個(gè)點(diǎn)的坐標(biāo)在一定時(shí)間內(nèi)進(jìn)行偏移迹栓。
為什么我不說(shuō)是一個(gè)view,因?yàn)樗鼪](méi)明確表明得用在view身上呀俭缓。
也就是說(shuō):這個(gè)它只是控制數(shù)值的變化克伊。


一般情況下,好像確實(shí)沒(méi)毛線用华坦。不過(guò)一般在viewviewGroup里面用的比較多愿吹。
因?yàn)椋?code>view的computeScroll()方法會(huì)在ondraw()的時(shí)候調(diào)用。所以惜姐,我們?cè)陂_(kāi)始Scroller的 數(shù)值變化時(shí)調(diào)用viewondraw()來(lái)調(diào)用computeSroll()犁跪。而computeScroll()干嘛用的椿息?給我們繼續(xù)刷新界面用的……那不是死循環(huán)了?所以Scroller這邊有一個(gè)很重要的方法坷衍。

Scroller.computeScrollOffset() -->:判斷Scroller的數(shù)值是否還在變化中寝优,true為變化中,false為變化完成枫耳。

注意:這邊已經(jīng)提到了乏矾,Scroller是操控?cái)?shù)值得,也就是你壓根看不到view滾起來(lái)嘉涌。那怎么辦妻熊?好的,就是上面提到的ScrollTo()仑最、ScrollBy()那倆方法了扔役。如果他在變化中,我們將通過(guò)這倆個(gè)方法讓view移動(dòng)起來(lái)警医。


  • 綜上所述:

這邊需要知道的幾個(gè)Scroller的方法亿胸。

  1. Scroller.computeScrollOffset() -->:判斷Scroller的數(shù)值是否還在變化中,true為變化中预皇,false為變化完成侈玄。

  2. Scroller.startScroll (int startX, int startY, int dx, int dy) -->開(kāi)始數(shù)值變化展父,前倆個(gè)參數(shù)為起始的X橘霎、Y值,后面?zhèn)z個(gè)是對(duì)應(yīng)的偏移量(偏移量:左上為正,右下為負(fù)裆甩。默認(rèn)偏移時(shí)間為250毫秒鲁豪,可以自己加個(gè)時(shí)間參數(shù)潘悼。)

  3. Scroller.getCurrX() -->:得到當(dāng)前變化的X。也就是第一個(gè)參數(shù)爬橡。

  4. Scroller.getCurrY() -->:得到當(dāng)前變化的Y治唤。就第二個(gè)參數(shù)。

然后糙申,等等宾添。嘿嘿……

  • 構(gòu)造函數(shù)
    總共三個(gè)構(gòu)造函數(shù):
    一個(gè)參數(shù)的傳遞的是上下文,倆個(gè)參數(shù)的多了個(gè)動(dòng)畫(huà)插入器柜裸,可以插效果缕陕。第三個(gè)參數(shù)是一個(gè)布爾類型的(英文名叫調(diào)速輪,并不知道干嘛的疙挺,誰(shuí)知道麻煩告知下榄檬,謝啦~~)。

  • 所以這邊貼點(diǎn)動(dòng)畫(huà)效果,摘錄自:大神講解的Scroller
    AccelerateDecelerateInterpolator 動(dòng)畫(huà)效果:開(kāi)始和結(jié)束都是緩慢的衔统,通過(guò)中間時(shí)候加速
    AccelerateInterpolator, 動(dòng)畫(huà)效果:開(kāi)始緩慢,之后加速
    AnticipateInterpolator, 動(dòng)畫(huà)效果:開(kāi)始后退,然后前進(jìn)
    AnticipateOvershootInterpolator, 動(dòng)畫(huà)效果:開(kāi)始后退锦爵,之后前進(jìn)并超過(guò)終點(diǎn)位置舱殿,最終退回到終點(diǎn)
    BounceInterpolator, 動(dòng)畫(huà)效果:慢慢反彈到,彈性衰減到結(jié)束
    CycleInterpolator, 動(dòng)畫(huà)效果:重復(fù)循環(huán)動(dòng)畫(huà)险掀,速度變化遵循正弦定律
    DecelerateInterpolator, 動(dòng)畫(huà)效果:剛開(kāi)始快速沪袭,之后減速
    LinearInterpolator, 動(dòng)畫(huà)效果:不斷的變化
    OvershootInterpolator 動(dòng)畫(huà)效果:像前超越最終點(diǎn)然后回來(lái)

三、代碼

  1. 在自定義view里面聲明Scroller樟氢。初始化方法里面冈绊。
   //可以模擬一個(gè)彈彈彈彈奏魚(yú)尾紋的效果
    scroller = new Scroller(getContext(),new BounceInterpolator(),false);
  1. 調(diào)用Scroller的開(kāi)始滾動(dòng)計(jì)算,我是在點(diǎn)擊時(shí)調(diào)用了下埠啃。
   //開(kāi)始滾動(dòng)的方法
private void startScroll(){    
      //這里設(shè)置從0,0 開(kāi)始死宣,x、y1000毫秒內(nèi)分別向左和上偏移200個(gè)單位
       //可以自己動(dòng)態(tài)控制四個(gè)值
      scroller.startScroll(0,0,200,200,1000);
      //記得刷新界面
      invalidate();
}
  1. 最后碴开!computeScroll()里面刷新界面顯示滾動(dòng)效果
 @Override
 public void computeScroll() {    
    //為true代表還在滾   
     if (scroller.computeScrollOffset()){        
         //讓view滾到當(dāng)前計(jì)算的位置毅该,就是讓他滾哪就滾哪。
         //注意用SrollTo潦牛,前面講解過(guò)啦~   SrollBy是疊加        
         scrollTo(scroller.getCurrX(),scroller.getCurrY());  
         postInvalidate();//重繪 
     }else {        
        //動(dòng)畫(huà)執(zhí)行完畢讓他回去    
         scrollTo(0,0);   
      }   
    super.computeScroll();
}

好的小功告成還是蠻簡(jiǎn)單的嘛眶掌。


結(jié)語(yǔ)

本渣希望能幫助到有需要的朋友~也希望能共同進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市巴碗,隨后出現(xiàn)的幾起案子朴爬,更是在濱河造成了極大的恐慌,老刑警劉巖橡淆,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召噩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡明垢,警方通過(guò)查閱死者的電腦和手機(jī)蚣常,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痊银,“玉大人抵蚊,你說(shuō)我怎么就攤上這事∷莞铮” “怎么了贞绳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)致稀。 經(jīng)常有香客問(wèn)我冈闭,道長(zhǎng),這世上最難降的妖魔是什么抖单? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任萎攒,我火速辦了婚禮遇八,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耍休。我一直安慰自己刃永,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布羊精。 她就那樣靜靜地躺著斯够,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喧锦。 梳的紋絲不亂的頭發(fā)上读规,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音燃少,去河邊找鬼束亏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛供汛,可吹牛的內(nèi)容都是我干的枪汪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怔昨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雀久!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起趁舀,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赖捌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后矮烹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體越庇,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年奉狈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卤唉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仁期,死狀恐怖桑驱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跛蛋,我是刑警寧澤熬的,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赊级,受9級(jí)特大地震影響押框,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜理逊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一橡伞、第九天 我趴在偏房一處隱蔽的房頂上張望盒揉。 院中可真熱鬧,春花似錦骑歹、人聲如沸预烙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至翘县,卻和暖如春最域,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锈麸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工镀脂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忘伞。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓薄翅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親氓奈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翘魄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 內(nèi)容是博主照著書(shū)敲出來(lái)的,博主碼字挺辛苦的舀奶,轉(zhuǎn)載請(qǐng)注明出處暑竟,后序內(nèi)容陸續(xù)會(huì)碼出。 當(dāng)了解了Android坐標(biāo)系和觸...
    Blankj閱讀 6,641評(píng)論 3 61
  • 什么是View View 是 Android 中所有控件的基類育勺。 View的位置參數(shù) View 的位置由它的四個(gè)頂...
    acc8226閱讀 1,177評(píng)論 0 7
  • 【春暖花開(kāi)】20170808 周三踐行day145 [在外] 搬家但荤,各種不規(guī)律的生活 [兒歌] 上樓梯 [古詩(shī)] ...
    Sophie2liu閱讀 249評(píng)論 0 1
  • 在 iOS 開(kāi)發(fā)中,懶加載是無(wú)處不在的 懶加載的格式如下: 懶加載本質(zhì)上是一個(gè)閉包 以上代碼可以改寫(xiě)為以下格式 懶...
    MarkusFeng閱讀 494評(píng)論 0 0
  • 昨天給老媽打電話涧至,她喃喃地說(shuō)腹躁,每天都會(huì)看我寫(xiě)的晚安筆記。好幾次的文字都能“惹她”哭得稀里嘩啦南蓬。不經(jīng)意堅(jiān)持的這個(gè)小舉...
    茉莉大大閱讀 132評(píng)論 0 0