Android中滾動的實現
1.基礎類View已經實現了大部分的滾動需要的基本支持
1)scrollBy,scrollTo
將View滾動到指定位置,其實就是通過記錄mScrollX和mScrollY並觸發重新繪制來完成
2)awakenScrollBars
觸發滾動條的繪制
3)setVerticalScrollbarEnabled,setHorizontalScrollbarEnabled,setScrollbarFadingEnabled,setHorizontalFadingEdgeEnabled,setVerticalFadingEdgeEnabled,setScrollbarStyle來控制Scroll
4)getScrollX,getScrollY獲取當前的offset
5)定義computeScroll給ViewGroup::drawChild調用,派生類如果要實現滾動效果,重載這個接口
6)和滾動比較有關的兩個參數,屏幕的寬和高,getHeight(),getWidth()
7)onScrollChanged通知滾動result,派生類可以重載,對滾動result作出響應
2.通常引進Scroller或者類似的機制來實現平滑的滾動效果(比如滑屏操作)
1)通過Scroller::startScroll或者Scroller::fling初始化起始坐標,duration等
2)在類的computeScroll中調用Scroller::computeScrollOffset來計算即時的位置mCurrX,mCurrY,將這兩個值賦給mScrollX,mScrollY。因為是自己修改mScrollX和mScrollY而不是通過View的scrollTo,scrollBy,所以自動調用onScrollChanged
3)調用invalidate或者postInvalidate來觸發刷屏操作,重新繪制的時候因為mScrollX和mScrollY的改變,實現了滑動的效果
3.程序設計上一般結合onInteceptTouchEvent和onTouchEvent
如果ActionDown後再來ActionMove,且兩者坐標出現移動,則讓程序進入Scrolling狀態,在ActionMove的時候調用scrollTo或者scrollBy
如果ActionDown後來ActionUp,且速度超過指定速度,則進行fling操作