Android Scroller與computeScroll的調用機制關系

jopen 8年前發布 | 14K 次閱讀 Android開發 移動開發

Android ViewGroup中的Scroller與computeScroll的有什么關系?

答:沒有直接的關系

知道了答案,是不是意味著下文就沒必要看了,如果說對ViewGroup自定義控件不感興趣,可以不用看了。


1.Scroller到底是什么?

答:Scroller只是個計算器,提供插值計算,讓滾動過程具有動畫屬性,但它并不是UI,也不是滑動輔助UI運動,反而是單純地為滑動提供計算。

無論從構造方法還是其他方法,以及Scroller的屬性可知,其并不會持有View,輔助ViewGroup滑動


2.Scroller只是提供計算,那誰來調用computeScroll使得ViewGroup滑動

答:computeScroll也不是來讓ViewGroup滑動的,真正讓ViewGroup滑動的是scrollTo,scrollBy。computeScroll的作用是計算ViewGroup如何滑動。而computeScroll是通過draw來調用的。


3.computeScroll和Scroller都是計算,兩者有啥關系?

答:文章開始已作答,沒有直接的關系。computeScroll和Scroller要是飛得拉關系的話,那就是computeScroll可以參考Scroller計算結果來影響scrollTo,scrollBy,從而使得滑動發生改變。也就是Scroller不會調用computeScroll,反而是computeScroll調用Scroller。


4.滑動時連續的,如何讓Scroller的計算也是連續的?

這個就問到了什么時候調用computeScroll了,如上所說computeScroll調用Scroller,只要computeScroll調用連續,Scroller也會連續,實質上computeScroll的連續性又invalidate方法控制,scrollTo,scrollBy都會調用invalidate,而invalidate回去觸發draw,從而computeScroll被連續調用,綜上,Scroller也會被連續調用,除非invalidate停止調用


5.computeScroll如何和Scroller的調用過程保持一致。

computeScroll參考Scroller影響scrollTo,scrollBy,實質上,為了不重復影響scrollTo,scrollBy,那么Scroller必須終止計算currX,currY。要知道計算有沒有終止,需要通過mScroller.computeScrollOffset()

6.如上問題應該說的很清楚了吧,如果不明白,請留言。

來自: http://my.oschina.net/ososchina/blog/600281

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!