je cherche à faire une application qui permet de tracer une courbe avec le doigt. Pas de problème pour ça avec le panel_touch et le didacticiel "Signature". Cependant, j'ai besoin de savoir précisément quelles zones sont traversées par la courbe. Si je fais un tracé rapide, le relevé des points n'est pas assez précis et certaine zone apparaissent comme non traversée. J'ai bien fait un calcul de tous les points constituant chaque petite droite pour savoir si la courbe traversait la zone, mais ça ne fonctionne pas dans tous les cas.
Question : peut-on rendre plus précise la fonction Panel_touch pour que le relevé de position se fasse plus souvent ?
Ou sinon, y a-t-il un moyen de détecter lorsque mon doigt passe sur un objet (label par exemple).
Si quelqu'un a une idée... Merci bien !
J'ai un 'vieux' souvenir que l'évènement Panel_Touch n'est pas très rapide, je ne sais pas si c'est toujours le cas.
Essaies d'ajouter une routine évènement pour Panel_Touch avec la librairie Reflection.
je cherche à faire une application qui permet de tracer une courbe avec le doigt. Pas de problème pour ça avec le panel_touch et le didacticiel "Signature". Cependant, j'ai besoin de savoir précisément quelles zones sont traversées par la courbe. Si je fais un tracé rapide, le relevé des points n'est pas assez précis et certaine zone apparaissent comme non traversée. J'ai bien fait un calcul de tous les points constituant chaque petite droite pour savoir si la courbe traversait la zone, mais ça ne fonctionne pas dans tous les cas.
Question : peut-on rendre plus précise la fonction Panel_touch pour que le relevé de position se fasse plus souvent ?
Ou sinon, y a-t-il un moyen de détecter lorsque mon doigt passe sur un objet (label par exemple).
Si quelqu'un a une idée... Merci bien !
Utilise ma bibliothèque GestureDetector. Il y a deux fonctions getHistoricalX et getHistoricalY qui te donneront les points intermédiaires entre deux événements.
Pendant que j'y suis... Est-ce que Gesture detector peut détecter lorsque le doigt je passe sur un objet ? J'ai besoin de connaitre les coordonées traversées pour savoir si l'objet en question est traversé, mais peut-être que l'objet peut réagir directement lorsqu'il est touché, ce serait plus simple.
Merci encore.
Pendant que j'y suis... Est-ce que Gesture detector peut détecter lorsque le doigt je passe sur un objet ? J'ai besoin de connaitre les coordonées traversées pour savoir si l'objet en question est traversé, mais peut-être que l'objet peut réagir directement lorsqu'il est touché, ce serait plus simple.
Merci encore.
Les évènements de toucher sont envoyés à l'objet qui a reçu le premier évènement (touch down, action = 0). Donc quand tu fais passer ton doigt au dessus d'autres vues, celles-ci ne peuvent recevoir aucun évènement. Il faut vérifier si les coordonnées du toucher sont dans la zone d'affichage d'une vue (c'est ce que fait un panel pour déléguer l'évènement à un de ses enfants).
Ok, c'est ce qui me semblait. C'est juste compliqué du coup quand ma vue est animée (en rotation notamment). Concernant la fonction GetHistoricalX, elle renvoie un nombre ou un ensemble de nombre ? Comment je l'appelle ? : If GetHistoricalX > 500 and GetHistoricalX < 600 then blablabla ?
Merci
Bon, j'ai fait ça, mais mon label ne change pas de couleur quand je passe dessus. Le PtrIndex, c'est pour le multitouch je pense ? J'ai mis 0, mais c'est peut-être pas bon...
Un peu perdu sur le coup...
Désolé...
B4X:
Sub Gesture_onTouch(Action As Int, X As Float, Y As Float, MotionEvent As Object) As Boolean
historic=GD.getHistorySize(MotionEvent)
For t=0 To historic-1
If GD.getHistoricalX(MotionEvent,0,t)>= labelcg.Left And GD.getHistoricalX(MotionEvent,0,t)<= labelcg.Left+labelcg.Width And GD.getHistoricaly(MotionEvent,0,t)>=labelcg.top And GD.getHistoricaly(MotionEvent,0,t)<=labelcg.Top+labelcg.Height Then
labelcg.Color=Colors.Green
End If
Next
Return True
End Sub
Le code a l'air correct à première vue. As-tu contrôlé les points renvoyés en les loggant ? Il n'y en a peut-être pas assez (du genre un au-dessus et un en dessous de ton label).
Une autre solution est d'associer un GestureDetector à toutes les vues et de renvoyer False dans l'évènement Touch (la vue rejette l'évènement; celui-ci et les évènements ultérieurs deviennent alors détectables par d'autres vues). Pas testé.
En fait, le log ne renvoie rien, j'ai mis une action a faire en tête de routine ('Gesture_ontouch') et elle ne se réalise pas. JE pense que la routine n'est même pas visitée...
C'est bon, j'avais un autre fonction qui interceptait le touch avant la tienne. Maintenant ça fonctionne.
Si je ne veux dessiner que d'un seul doigt, c'est avec "Painters" que ça se passe ? Je n'utilise que le painter(0) ?
Celui-ci est un peu hors sujet mais j'adore l'idée tablette graphique XP-PEN avec stylet .
Permet de numériser directement ses dessins en les dessinant sur papier.
Possibilité également de réaliser des calques pour faciliter ses retouches sur Photoshop.