2017-05-30 3 views
0

j'ai une vue personnalisée qui l'emporte sur dispatchHoverEvent() pour qu'il puisse mettre en œuvre un certain soutien pour les fonctions de Talkback, il a le code suivant pour les tests:événement ACTION_HOVER_ENTER répète les coordonnées précédentes

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; 
     } 
    } 

Le résultat de cette après deux gestes est (retiré des sorties log 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 

le problème est les événements ACTION_HOVER_ENTER, en particulier l'événement suivant entrent après un événement de déplacement et de sortie. Dans api24 +, le deuxième événement d'entrée en vol semble répéter les coordonnées précédentes de l'événement d'entrée en vol stationnaire (si l'événement d'entrée initial est maintenu pendant quelques secondes). Parfois, il a les mêmes valeurs x, y ou seulement l'une d'entre elles, mais l'événement enter réel n'est pas proche des valeurs de coordonnées. Cela décourage ma gestion des événements d'accessibilité pour la vue personnalisée.

S'il y a des événements de vol stationnaire qui n'ont pas ACTION_HOVER_MOVE il donne le comportement prévu:

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 

Est-ce une caractéristique de la façon dont l'accessibilité utilise les événements de vol stationnaire? Est-il possible d'éviter ce comportement?

Seulement été en mesure de tester cela sur un émulateur.

Répondre

0

Les emplacements signalés pour ces événements proviennent du système et semblent inévitables. Mon code qui gère ces événements de vol stationnaire n'était tout simplement pas assez robuste pour y faire face. La solution était de le rendre capable de faire face à ces événements de vol stationnaire qui rapportent l'ancien emplacement.