scroller 做自己的動畫效果

2021-06-22 06:30:45 字數 1234 閱讀 7313

在介紹scroller類之前,我們先去了解view的scrollby() 和scrollto()方法的區別,在區分這兩個方法的之前,我們要先理解view 裡面的兩個成員變數mscrollx, mscrolly,x軸方向的偏移量和y軸方向的偏移量,這個是乙個相對距離,相對的不是螢幕的原點,而是view的左邊緣,向右滑動 mscrollx就為負數,向左滑動mscrollx為正數。

假如乙個view,呼叫兩次scrollto(-10, 0),第一次向右滾動10,第二次就不滾動了,因為mscrollx和x相等了,當我們呼叫兩次scrollby(-10, 0),第一次向右滾動10,第二次再向右滾動10,他是相對view的上乙個位置來滾動的。

對於scrollto()和scrollby()方法還有一點需要注意,這點也很重要,假如你給乙個linearlayout呼叫scrollto()方法,並不是linearlayout滾動,而是linearlayout裡面的內容進行滾動,比如你想對乙個按鈕進行滾動,直接用button呼叫scrollto()一定達不到你的需求,大家可以試一試,如果真要對某個按鈕進行scrollto()滾動的話,我們可以在button外面包裹一層layout,然後對layout呼叫scrollto()方法。

view滾動的實現原理,我們先呼叫scroller的startscroll()方法來進行一些滾動的初始化設定,然後迫使view進行繪製,我們呼叫view的invalidate()或postinvalidate()就可以重新繪製view,繪製view的時候會觸發computescroll()方法,我們重寫computescroll(),在computescroll()裡面先呼叫scroller的computescrolloffset()方法來判斷滾動有沒有結束,如果滾動沒有結束我們就呼叫scrollto()方法來進行滾動,該scrollto()方法雖然會重新繪製view,但是我們還是要手動呼叫下invalidate()或者postinvalidate()來觸發介面重繪,重新繪製view又觸發computescroll(),所以就進入乙個迴圈階段,這樣子就實現了在某個時間段裡面滾動某段距離的乙個平滑的滾動效果

也許有人會問,幹嘛還要呼叫來呼叫去最後在呼叫scrollto()方法,還不如直接呼叫scrollto()方法來實現滾動,其實直接呼叫是可以,只不過scrollto()是瞬間滾動的,給人的使用者體驗不太好,所以android提供了scroller類實現平滑滾動的效果。為了方面大家理解,我畫了乙個簡單的呼叫示意圖

使用CSS實現outline切換的動畫效果

我記得有個版本的迅雷軟體,會發現focus文字框時候,其外發光的外掛程式會跟著動畫移動。據說這一系列n動畫互動引擎的維護成本還是挺高的。今天,偶然看到乙個名叫nikita vasilyev的兄弟在web頁面上折騰了個類似效果,您有興趣可以點選這裡瞅瞅。github位址為 焦點飛來飛去 使用很簡單,只...

動效怎麼做 介面動效落地的那點東西

最近在學習梳理動效落地,了解了很多方法,有很多小夥伴沒有實際需求也很少知道具體有哪些法子,今天我整理一些落地的工具,方便學習。最常輸出的方式為 gif png序列幀 json svga apng webp svg動畫,這些都比較常用的實現方式。ae裡選擇選單合成 adobe media encode...

做真實的自己

1 別總是自己跟自己過不去 2 人人都有自己的活法 3 用心做自己該做的事 4 不要過於計較別人的評價 5 不妨暫時丟開煩心事 6 自己感覺幸福就是幸福 7 最重要的是今天的心 8 木已成舟便要順其自然 9 不必一味討好別人 10 珍惜自己才會擁抱生活 實用語錄 1 只要把臉朝著陽光,你的面前就不會...