Android MotionEvent 和 TouchSlop

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>

}


















發佈了23 篇原創文章 · 獲贊 89 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章