ACTION_HOVER_ENTER事件重复前一个坐标

时间:2017-05-30 15:36:41

标签: android hover accessibility motionevent

我有一个覆盖dispatchHoverEvent()的自定义视图,因此它可以实现对talkBack功能的一些支持,它有以下代码用于测试:

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

这是可访问性如何使用悬停事件的特征吗?有没有办法避免这种行为?

只能在模拟器上测试它。

1 个答案:

答案 0 :(得分:0)

这些事件的报告位置来自系统,似乎不可避免。我处理这些悬停事件的代码不够强大,无法处理它们。解决方案是让它能够处理这些悬停输入报告上一个旧位置的事件。