2012-09-22 3 views
0

J'ai un problème avec l'implémentation des événements tactiles sur GLSurfaceView. La taille des vues est de 1280x696, à cause de la barre d'état android (tablette) au fond avec les touches, le temps etc., (résolution d'écran est 1280x800), mais OnTouchListener reçoit des événements tactiles avec des coords [646.0,739.0], et ainsi ma méthode gluunproject ne parvient pas à renvoyer des valeurs correctes Existe-t-il un moyen de renvoyer des événements qui respectent ces limites? ou comment devrais-je recalculer la position?Comment obtenir les bonnes valeurs de l'événement tactile Views

Répondre

2

En général la transition entre ces systèmes de coordonnées: Si vous passer du système A à B et vous avez des points

  • AOrigin (gauche coin supérieur de votre point de vue du récepteur)
  • AEND (coin inférieur droit de votre point de vue du récepteur (origine + taille))
  • BOrigin (coin supérieur gauche de votre vue GL)
  • BEND (coin inférieur droit de votre point de vue GL (origine + taille))

où AOrigin et BOrigin représentent le même endroit en vue et va de même pour AEND et BEND alors pour le point P dans la vue du récepteur:

X = B.Origin.x + ((P.x - AOrigin.x)/(AEnd.x - AOrigin.x)) * (BEnd.x - B.Origin.x) 
Y = B.Origin.y + ((P.y - AOrigin.y)/(AEnd.y - AOrigin.y)) * (BEnd.y - B.Origin.y) 

Pour votre cas (je ne suis pas sûr à cause du manque de informations) AOrigin est à (0,0), AEND est à (646, 739), BOrigin est à (0,0) et BEND est à (1280, 800):

X = P.x/646 * 1280 
Y = P.y/739 * 800 

Vous pouvez également utiliser cette transition vers/depuis les coordonnées "GL". Un cas courant est d'avoir une vue avec le coin supérieur gauche à (0, 0) et le bas à (1280, 800) et vos coordonnées "GL" sont de (-1, 1) à (1, -1):

X = -1 + (P.x/1280)*2 
Y = 1 + (P.y/800)*(-2) 

Notez également que vous pouvez utiliser les 2 paires de points qui représentent même endroit sur l'écran aussi longtemps que (origin-end).x != 0 ET (origin-end).y != 0

Questions connexes