scroller分析

彈性滑動(dòng)

這個(gè)類不持有View,也沒(méi)有定時(shí)器通知View刷新礼殊,里面只是根據(jù)當(dāng)前時(shí)間來(lái)計(jì)算當(dāng)前View應(yīng)該在的位置
使用方法

Scroller  scroller = new Scroller(context);
scroller.startScroll(開始坐標(biāo),結(jié)束坐標(biāo)砌函,時(shí)間);
invalidate();//這個(gè)一定要調(diào)用
//接下來(lái)我們要重寫View的computeScroll()方法
@Override
    public void computeScroll() {
        if (scroller.computeScrollOffset()) {//計(jì)算當(dāng)前應(yīng)該在的坐標(biāo)
            scrollTo(-scroller.getCurrX(), -scroller.getCurrY());
        }
    }

實(shí)際上這個(gè)的原理就是帜消,調(diào)用完invalidate就會(huì)draw,然后就會(huì)調(diào)用computeScroll设褐,里面進(jìn)行滑動(dòng)颠蕴,然后scrollTo滑動(dòng),里面又會(huì)調(diào)用invalidate助析,就這么一直循環(huán)犀被,一直到scroller.computeScrollOffset為false,也就是滑動(dòng)結(jié)束

慣性滑動(dòng)

我們需要計(jì)算速度外冀,然后調(diào)用fling方法即可

@Override
    public boolean onTouchEvent(MotionEvent event) {
        if (tracker == null) {
            tracker = VelocityTracker.obtain();
        }
        tracker.addMovement(event);
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                rawX = event.getRawX();
                rawY = event.getRawY();
                scroller.abortAnimation();
                break;
            case MotionEvent.ACTION_MOVE:
                float crawX = event.getRawX();
                float crawY = event.getRawY();

                float dy = crawY - rawY;
                float dx = crawX - rawX;
                scrollBy((int) -dx, (int) -dy);
                rawX = event.getRawX();
                rawY = event.getRawY();
                break;
            case MotionEvent.ACTION_UP:
                tracker.computeCurrentVelocity(1000);
                float xVelocity = tracker.getXVelocity();
                float yVelocity = tracker.getYVelocity();
              //關(guān)鍵的是這里寡键,這里fling方法前兩個(gè)參數(shù)是要fling的起始坐標(biāo),一般就是當(dāng)前的滑動(dòng)坐標(biāo)
              //第二三個(gè)參數(shù)就是velocitytracker得到的速度
              //后面參數(shù)是慣性滑動(dòng)的范圍雪隧,也就是滑動(dòng)終點(diǎn)的范圍
                scroller.fling(-getScrollX(), -getScrollY(), (int) xVelocity , (int) yVelocity , 0, width , 0, height);
                invalidate(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!這里很重要西轩,fling后一定要手動(dòng)刷新!
                tracker.clear();
                tracker.recycle();
                tracker = null;
                break;
        }
        return true;
    }

這里注意一點(diǎn)脑沿,就是scroller的坐標(biāo)是正的藕畔,然后yVelocity的速度的正負(fù)也要搞清。否則滑動(dòng)不起作用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庄拇,一起剝皮案震驚了整個(gè)濱河市注服,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丛忆,老刑警劉巖祠汇,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熄诡,居然都是意外死亡可很,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門凰浮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)我抠,“玉大人苇本,你說(shuō)我怎么就攤上這事〔送兀” “怎么了瓣窄?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纳鼎。 經(jīng)常有香客問(wèn)我俺夕,道長(zhǎng),這世上最難降的妖魔是什么贱鄙? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任劝贸,我火速辦了婚禮,結(jié)果婚禮上逗宁,老公的妹妹穿的比我還像新娘映九。我一直安慰自己,他們只是感情好瞎颗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布件甥。 她就那樣靜靜地躺著,像睡著了一般哼拔。 火紅的嫁衣襯著肌膚如雪引有。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天管挟,我揣著相機(jī)與錄音轿曙,去河邊找鬼。 笑死僻孝,一個(gè)胖子當(dāng)著我的面吹牛导帝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穿铆,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼您单,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了荞雏?” 一聲冷哼從身側(cè)響起虐秦,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凤优,沒(méi)想到半個(gè)月后悦陋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筑辨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年俺驶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棍辕。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暮现,死狀恐怖还绘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栖袋,我是刑警寧澤拍顷,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站塘幅,受9級(jí)特大地震影響昔案,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌块,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一爱沟、第九天 我趴在偏房一處隱蔽的房頂上張望帅霜。 院中可真熱鬧匆背,春花似錦、人聲如沸身冀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搂根。三九已至珍促,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剩愧,已是汗流浹背猪叙。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仁卷,地道東北人穴翩。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锦积,于是被迫代替她去往敵國(guó)和親芒帕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 什么是View View 是 Android 中所有控件的基類丰介。 View的位置參數(shù) View 的位置由它的四個(gè)頂...
    acc8226閱讀 1,177評(píng)論 0 7
  • 本文分析版本: Android API 22 1.簡(jiǎn)介 Android開發(fā)中背蟆,如果我們希望使一個(gè)View滑動(dòng)的話,...
    SkyKai閱讀 2,344評(píng)論 2 24
  • 導(dǎo)語(yǔ) 滑動(dòng)算是Android比較常用的效果了哮幢,滑動(dòng)的操作具有很好的用戶體驗(yàn)性带膀。 主要內(nèi)容 滑動(dòng)效果是如何產(chǎn)生的 實(shí)...
    一個(gè)有故事的程序員閱讀 6,452評(píng)論 3 11
  • 本文參加# 印象青農(nóng)垛叨,萌有感受#活動(dòng),本文承諾钢悲,文章內(nèi)容為原創(chuàng)点额,且未在其他平臺(tái)發(fā)表過(guò)” 來(lái)到青農(nóng)之前舔株,我還是一個(gè)懵...
    王姍姍lh閱讀 207評(píng)論 0 2
  • ——讀《約翰·克里斯托夫》有感 約翰·克里斯托夫是個(gè)天才的音樂(lè)家,但他的愛(ài)情之路卻似乎一直找不...
    水水5253閱讀 435評(píng)論 0 2