MotionEvent()
{
在手指接觸屏幕所產生的一系列事件中,典型的事件類型有以下幾中:
* ACTION_DOWN 手指剛接觸屏幕;
* ACTION_MOVE 手指在屏幕上移動;
* ACTION_UP 手指從屏幕上鬆開的一瞬間;
正常情況下 ,一次手指觸摸屏幕的行爲會觸發一系列點擊事件,考慮如下幾中情況:
* 點擊屏幕後離開鬆開,事件序列爲DOWN --->UP;
* 點擊屏幕滑動一會兒在鬆開,事件序列爲DOWN--->MOVE--->.........--->MOVE --->UP。
上述三種情況是典型的事件序列,同時通過MotionEvent對象我們可以得到點擊事件發生的x和y的座標。爲此,系統提供了兩組方法: getX// getY 和 getRawX// getRawY。
它們的區別其實很簡單,getX 、getY 返回的是相對於當前View 左上角的x 和 y的座標, 而getRawX 、getRawY 返回的是相對於手機屏幕左上角的 x 和 y 座標。
}
TouchSlop()
{
TouchSlop是系統所能識別出的被認爲是滑動的最小距離,換個說法,當手指在屏幕上滑動時,如果兩次滑動之間的距離小於這個 常量,那麼系統就不認爲你是在進行滑動操作。
原因間之:滑動的距離太短,系統不認爲它是滑動的。這是一個常量,和設備有關,在不同設備上這個值可能是不同的,
通過如下方式即可獲取這個常量// ViewConfiguration.get(getContext()).getScaledTouchSlop();
這個常量有什麼意義呢? 當我們在處理滑動時,可以利用這個常量來做一些過濾, 比如當兩次滑動事件的滑動距離小於這個值,我們就可以認爲未達到滑動距離的臨界值,因此就可以認爲它們不是滑動,這樣做可以有更好的用戶體驗。
如果細看的話,可以在源碼中找到這個常量的定義,在frameworks/base/core/res/res/values/config.xml文件中。
如下代碼所示:這個"config_viewConfigurationTouchSlop"對應的就這個常量的定義。
<!-- Base "touch slop" value used by ViewConfiguration as a movement threshold where scrolling should begin .-->
<dimen name ="config_viewConfigurationTouchSlop">8dp</dimen>
}