Android Scroller與computeScroll的調用機制關系
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.如上問題應該說的很清楚了吧,如果不明白,請留言。