French déplacer panel avec le doigt

Bonjour pour mon application, j' ai besoin que l' utilisateur puisse déplacer un panel avec le doigt.
Avant cela j' utiliser deux seekbar (1 horizental et 1 vertical)


Comment gérer la position du doigt sur l' écran ?
Dois je utiliser l' évement longclick du panel ?
 

nico78

Active Member
Licensed User
Longtime User
Tu devrais jeter un oeil sur la lib Gestures, il y a un exemple avec un panel justement.

Gestures


avec un exemple d'Erel ici:

Exemple
 
Last edited:

nico78

Active Member
Licensed User
Longtime User
Faut pas dénigrer le travail des autres pour mettre le sien en avant, si ta lib est meilleur, elle parlera d'elle même.

J'ai essayé ton exemple avec le bitmap et j'ai constaté des déplacements incohérents avec un seul doigt (tremblements, déplacement de l'image au relâchement exagéré et non cohérent), est -ce dû au code de l'exemple non optimisé?
 

Informatix

Expert
Licensed User
Longtime User
Faut pas dénigrer le travail des autres pour mettre le sien en avant, si ta lib est meilleur, elle parlera d'elle même.

Ca n'a rien à voir avec ça. Ce serait mesquin de ma part. La bibliothèque Gesture Detector propose tout ce que propose la bibliothèque Gestures. Le code est le même derrière (forcément, vu qu'il n'y a qu'une façon de récupérer ces infos). Mais Gesture Detector a des fonctionnalités en plus. Elle est donc objectivement plus riche. Et son utilisation est plus simple car il n'y a pas besoin d'analyser le résultat des MotionEvents. Tout est renvoyé à travers des événements.

J'ai essayé ton exemple avec le bitmap et j'ai constaté des déplacements incohérents avec un seul doigt (tremblements, déplacement de l'image au relâchement exagéré et non cohérent), est -ce dû au code de l'exemple non optimisé?

As-tu remarqué qu'elle démontrait deux choses: l'événement drag et l'événement fling (mouvement violent) ? Je reconnais qu'elle est un peu sommaire pour gérer correctement l'événement fling. Il faudrait faire des calculs d'inertie, déclencher à partir d'un seuil, etc. Par contre, elle fonctionne parfaitement pour l'événement drag. Retire le code du fling et tu verras par toi-même.
 
Last edited:

Informatix

Expert
Licensed User
Longtime User
Pour éviter qu'un drag (l'action de déplacer un objet) ne fasse les frais de l'imprécision de la détection du doigt par l'appareil, généralement on ne le gère qu'une fois qu'un seuil a été franchi (il y a même une valeur pour chaque périphérique qui s'appelle scaledtouchslop, mais on verra plus tard comment on la récupère). On positionne alors un booléen à vrai (exemple: MouvementEnCours = true) pour éviter de revérifier le seuil (sinon ce serait saccadé).
 

Informatix

Expert
Licensed User
Longtime User
Concernant le lag entre le mouvement du doigt et le déplacement du panel, qui peut occasionner une petite gêne sur les appareils peu véloces, elle est manifestement due à la fonction qu'Erel conseille d'utiliser pour renvoyer un événement depuis une bibliothèque (raiseEventFromUI). J'ai donc le choix suivant: soit ne pas suivre son conseil et faire à l'ancienne (raiseEvent), soit attendre qu'il améliore les performances de son propre code. Pour l'instant, je ne touche à rien.

EDIT: je viens de soumettre le problème à Erel. Et merci à Nico78 d'avoir insisté. Le problème n'était pas perceptible sur mes deux appareils. Par contre, avec l'émulateur, ouille ouille !
 
Last edited:
Top