2017-06-30 3 views
1

Je développe un jeu de recherche de mots. Table Layout contient des textviews. Les textviews affichent les caractères. Lorsque l'utilisateur trouve un mot dans l'une des 8 directions: TopToBottom, BottomToTop, LeftToRight, RightToLeft, TopToBottomRight, BottomToTopLeft, ToptoBottomLeft, BottomToTopRight, je veux afficher la ligne de canevas sur le mot dans la direction correspondante.Dessiner uniquement des lignes horizontales, verticales et diagonales dans Android

Je peux dessiner des lignes horizontales, verticales et diagonales d'un point de départ à un point final. Le point de départ est l'endroit où l'utilisateur commence à balayer. Le point final est l'endroit où il arrête le balayage.

Check the first three screenshots here

Mais mon problème est que je peux aussi dessiner d'autres lignes entre mauvaises coordonnées qui ne sont pas horizontales, les lignes verticales ou diagonales. Voir les trois captures d'écran suivantes.

Je souhaite dessiner uniquement des lignes horizontales, verticales et diagonales. Quand le point de fin est dans de mauvaises coordonnées, j'ai besoin de déplacer le point de fin pour coïncider avec n'importe quelle direction de proximité (qui est horizontale, verticale ou diagonale).

+0

Vous cherchez à dessiner des lignes sur des mots non valides, ne devriez-vous pas les déconseiller? –

+0

Oui. Nous devrions déconseiller les mauvaises coordonnées. Ensuite, nous devons déplacer les coordonnées vers l'une des directions proches qui peuvent être horizontales, verticales ou diagonales. Ainsi, même si l'utilisateur balaie les mauvaises coordonnées, nous pouvons tracer la ligne dans les bonnes coordonnées. –

Répondre

0

Vous pouvez trouver la pente de la ligne avant de dessiner. En supposant de taille égale, des lettres régulièrement espacées, et les points de contact sont à la même position dans chaque lettre ...

un peu plus de 0 - ligne verticale
± 1 - diagonale
0 - horizontal

Formule = (p2.y - p1.y)/(p2.x - p1.x)

+0

Votre réponse est un bon indice pour ma question. Lorsque l'utilisateur touche la grille autre que la direction verticale, diagonale et horizontale, la pente est toujours inférieure ou supérieure à ± 1. –