在Workspace.Java類實現,相關方法有:
1) computeScroll():重寫了父類的computeScroll();主要功能是計算拖動的位移量、更新背景、設定要顯示的螢幕(setCurrentScreen(mCurrentScreen);)。
2) dispatchDraw():重寫了父類的dispatchDraw();主要功能是判斷抽屜是否開啟、繪製指定的螢幕,可以繪製當前一屏,也可以繪製當前螢幕和下一螢幕,也可以繪製所有的螢幕,這兒的繪製指顯示螢幕上的child(例如:app、folder、Wiget)。和 computeScroll()中的setCurrentScreen(mCurrentScreen);方法配合使用可以實現螢幕的拖動多少顯示多少的功能。
3) onMeasure():重寫了父類的onMeasure();主要功能是設定螢幕的顯示大小。由每個child的measure()方法設定。
4) onLayout():重寫了父類的onLayout();主要功能是設定螢幕的顯示位置。由child的layout()方法設定。
5) onInterceptTouchEvent():重寫了父類的onInterceptTouchEvent();主要功能是在onTouchEvent()方法之前處理touch事件。包括:down、up、move事件。
? 用xy記錄滑鼠移動時的座標值;
? mLastMotionX和mLastMotionY記錄了上次滑鼠按下時的XY值,在ACTION_MOVE中賦值;
? xDiff和yDiff記錄xy與mLastMotionX、mLastMotionY差值的絕對值;
? touchSlop為系統定義的標準值,初值為16;
? 當xDiff和yDiff大於touchSlop時就認為介面拖動了足夠大的距離,螢幕就可以移動了;
? 當onInterceptTouchEvent()返回true時進入onTouchEvent()。
6) onTouchEvent():重寫了父類的onTouchEvent();主要功能是處理onInterceptTouchEvent()傳回值為true時傳遞過來的touch事件。