2017-05-30 648 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

这些事件的报告位置来自系统,似乎不可避免。我处理这些悬停事件的代码不足以处理它们。解决方案是使它能够处理这些悬停输入事件,报告以前的旧位置。