2017-05-30 643 views
0

我有一個覆蓋dispatchHoverEvent(自定義視圖,因此它可以實現對語音對講功能的一些支持,它爲測試下面的代碼:ACTION_HOVER_ENTER事件重複)先前座標

int action = event.getActionMasked(); 
    switch (action) { 
     case MotionEvent.ACTION_HOVER_ENTER: { 
      Log.d("dispatchHoverEvent", "ACTION_HOVER_ENTER x=" + x + " y=" + y); 
      break; 
     } 
     case MotionEvent.ACTION_HOVER_MOVE: { 
      Log.d("dispatchHoverEvent", "ACTION_HOVER_MOVE x=" + x + " y=" + y); 
      break; 
     } 
     case MotionEvent.ACTION_HOVER_EXIT: { 
      Log.d("dispatchHoverEvent", "ACTION_HOVER_EXIT x=" + x + " y=" + y); 
      break; 
     } 
    } 

兩個手勢後,輸出此被(移除了一些ACTION_HOVER_MOVE日誌輸出):

D/dispatchHoverEvent: ACTION_HOVER_ENTER x=73.03711 y=413.70703 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=79.0686 y=412.71094 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=85.06714 y=412.71094 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=93.07617 y=412.71094 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=103.062744 y=412.71094 
... 
... 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=203.15918 y=416.6953 
D/dispatchHoverEvent: ACTION_HOVER_EXIT x=203.15918 y=416.6953 
D/dispatchHoverEvent: ACTION_HOVER_ENTER x=73.03711 y=412.71094 
D/dispatchHoverEvent: ACTION_HOVER_MOVE x=643.5571 y=413.70703 
D/dispatchHoverEvent: ACTION_HOVER_EXIT x=643.5571 y=413.70703 

問題是ACTION_HOVER_ENTER事件,具體有以下的舉動和退出事件之後輸入事件。在api24 +中,第二個懸停輸入事件似乎重複上一個懸停輸入事件的座標(如果初始輸入事件持續幾秒鐘)。有時它具有相同的x,y值,或者只有其中一個,但實際的輸入事件不在任何座標值附近。這拋棄了我對自定義視圖的可訪問性事件的處理。

如果有沒有ACTION_HOVER_MOVE它給人的預測行爲懸停事件:

D/dispatchHoverEvent: ACTION_HOVER_ENTER x=98.08594 y=424.72266 
D/dispatchHoverEvent: ACTION_HOVER_EXIT x=98.08594 y=424.72266 
D/dispatchHoverEvent: ACTION_HOVER_ENTER x=442.3755 y=428.70703 
D/dispatchHoverEvent: ACTION_HOVER_EXIT x=442.3755 y=428.70703 

這是的輔助功能如何使用懸停事件的特點?有什麼辦法可以避免這種行爲?

只能在模擬器上進行測試。

回答

0

這些事件的報告位置來自系統,似乎不可避免。我處理這些懸停事件的代碼不足以處理它們。解決方案是使它能夠處理這些懸停輸入事件,報告以前的舊位置。