Dématérialisation – Faire signer sur support tactile

0

Avec l’avènement des appareils tactiles, les solutions de dématérialisation se multiplient. Certains documents sont plus difficilement dématérialisables, c’est le cas en particulier des documents nécessitant une signature. Il existe évidemment des solutions de signature électronique mais elles ne peuvent pas être mise en place dans toutes les situations.

Imaginons le cas d’un technicien se déplaçant au domicile de son client pour réaliser une intervention, faire un rapport de cette dernière et enfin faire signer ce dernier au client. Il peut s’avérer intéressant, aujourd’hui, de saisir ce rapport sur tablette tactile.

Dans ce billet, je vais vous présenter comment créer un composant de signature pour appareils tactiles Android.

device-2011-09-01-220506

 

View, le composant de base

Lorsqu’on veut créer un nouveau composant visuel, celui-ci doit hériter de la classe View ou d’une de ses classes fille.

Une chose importante à savoir est que lorsque le constructeur de votre composant est appelé, sa taille initiale est de 0 sur 0. Vous ne pouvez donc pas y faire les initialisations nécessitant de connaître la taille réelle de votre composant.
Par contre, la méthode onSizeChanged vous informe dès que votre composant change de taille et notamment, lorsque celui-ci est inséré dans la hiérarchie des vues de l’activité. C’est donc ici que nous allons initialiser nos éléments.
On veut pouvoir dessiner sur notre composant mais aussi pouvoir sauvegarder le dessin. Nous allons donc garder une référence sur le Bitmap du Canvas.

Saisir la signature

Nous allons utiliser la méthode onTouchEvent de la classe View. Cette méthode est appelée dès que l’utilisateur touche l’écran. L’unique paramètre de cette méthode est un objet MotionEvent. La méthode MotionEvent#getAction nous indique le type de mouvement détecté. Les 2 actions qui nous intéresse sont ACTION_DOWN (un appui) et ACTION_MOVE (un déplacement). Nous allons donc suivre tous les mouvements de l’utilisateur afin de dessiner son tracé.
Dans un souci évident de performances, le système n’appelle pas la méthode onTouchEvent à chaque position de l’utilisateur, mais « bufferise » celles-ci. Ainsi, l’objet MotionEvent contient les coordonnées du point courant où se situe l’utilisateur mais également un historique des points précédents depuis le précédent appel de onTouchEvent.
Voici donc à quoi ressemble notre méthode onTouchEvent.

Nous allons à présent dessiner ce tracé. Lorsque l’action est ACTION_DOWN, nous dessinons un point aux coordonnées de l’évènement, par contre, lors d’un déplacement, nous devons relier ces points afin de dessiner tout le trajet. Pour cela, nous avons besoin de connaître en permanence le point précédent afin de le relier au point courant.

Effacer l’écran, récupérer l’image

Nous ajoutons 2 méthodes publiques à notre composant afin de pouvoir effacer l’écran et récupérer l’image. Pour effacer, on repeint tout simplement avec la couleur de fond.

 

device-2011-09-02-152002_noheader

 

Sauvegarder en base de données

Il est ensuite possible de sauvegarder cette image dans une base de données SQLite, dans une colonne de type BLOB.

Restaurer l’image

Enfin, voyons comment afficher l’image après l’avoir récupérée depuis la base de données

Code Source

Les sources de l’application sont disponibles sur le Github de Zenika

Partagez cet article.

A propos de l'auteur

Ajouter un commentaire