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操作