[TUTO] Créer un compteur tactile
Dans la lancée, je vous fait encore un petit tuto pour créer une fonctionnalité sympa : un compteur tactile (augmentation/diminution de la valeur en posant puis déplaçant son doigt vers le haut/bas sur toute la surface de l'écran).
Voici une vidéo vous montrant le principe, sachant que dans celle-ci il est question de 4 compteurs différents côtes à côtes :
http://www.elviish.eu/Tutos/compteur.avi
Je vous laisse mettre vous-même en place le reste de l'application, positionner le textview, ...
Nous allons ici nous concentrer sur l'algorithme implémentant la fonctionnalité, rien de plus.
Attention ! Le layout principal, conteneur du TextView, doit OBLIGATOIREMENT être défini sur tout l'affichage, en choisissant l'attribut fill_parent pour la lageur et la hauteur !
Exemple :
Etape 0 : Préparer ses variables
Etape 1 : Définir la fonction chargée des évènements sur l'écran tactile
Etape 2 : remplir la fonction
Etape 3 : mettre à jour l'affichage, avec de la couleur suivant la valeur !
A insérer à la suite du code précédent, dans la même fonction, après la fin du switch ! De cette manière l'affichage sera mis à jour en temps réel, et non lors du retrait du doigt de l'écran (meilleure visualisation).
J'espère que vous aurez apprécié ce tuto, si vous avez des commentaires ou des problèmes avec, je reste à votre disposition.
Le code source complet du compteur montré en exemple est disponible ici :
http://www.elviish.eu/Tutos/compteur.java
Voici une vidéo vous montrant le principe, sachant que dans celle-ci il est question de 4 compteurs différents côtes à côtes :
http://www.elviish.eu/Tutos/compteur.avi
Je vous laisse mettre vous-même en place le reste de l'application, positionner le textview, ...
Nous allons ici nous concentrer sur l'algorithme implémentant la fonctionnalité, rien de plus.
Attention ! Le layout principal, conteneur du TextView, doit OBLIGATOIREMENT être défini sur tout l'affichage, en choisissant l'attribut fill_parent pour la lageur et la hauteur !
Exemple :
- Code: Select All Code
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
>
</TextView>
</LinearLayout>
Etape 0 : Préparer ses variables
- Code: Select All Code
public static final int valeurMax = 10;
// L'augmentation/diminution maximale en un mouvement continu.
// Plus cette valeur est haute, plus sensible sera la modification de la valeur.
// Ici j'ai choisi 10, la valeur que j'utilise dans mon application.
private float lastCoordY;
// Point de repère vertical sauvegardé lors du premier contact entre le doigt et l'écran
private int currentValue = 0;
// Valeur qui sera modifiée lors du mouvement du doigt, puis placée visible. A vous de choisir la valeur de départ, ici 0;
TextView tv;
// TextView qui servira a afficher la valeur actuelle du compteur
// A vous de le lier a votre textview, dans le onCreate() par exemple
private float screen_height = getWindowManager().getDefaultDisplay().getHeight();
// La hauteur en pixels de l'écran
Etape 1 : Définir la fonction chargée des évènements sur l'écran tactile
- Code: Select All Code
public boolean onTouchEvent(MotionEvent e)
{
switch(e.getAction())
{
case MotionEvent.ACTION_DOWN :
// Evènement généré lors de l'appui sur l'écran
break;
case MotionEvent.ACTION_MOVE :
// Evènement généré lors du déplacement du doigt sur l'écran
break;
case MotionEvent.ACTION_UP :
// Evènement généré lors du retrait du doigt de l'écran
// Ne sera pas utilisé dans ce tuto
break;
}
return super.onTouchEvent(e);
}
Etape 2 : remplir la fonction
- Code: Select All Code
case MotionEvent.ACTION_DOWN :
// Evènement généré lors de l'appui sur l'écran
lastCoordY = e.getY();
// On sauvegarde la coordonnée verticales du doigt sur l'écran, qui servira de repère "0" lors du mouvement
break;
case MotionEvent.ACTION_MOVE :
// Evènement généré lors du déplacement du doigt sur l'écran
float newCoordY = e.getY();
// Si le déplacement se fait de bas en haut
if (lastCoordY > newCoordY && lastCoordY - newCoordY >= screen_height / valeurMax)
{
currentValue ++; // On augmente la valeur du compteur
lastCoordY = newCoordY; // Et on met notre point "0" a jour
}
// Sinon si le déplacement se fait de haut en bas
else if (lastCoordY < newCoordY && newCoordY - lastCoordY >= screen_height / valeurMax)
{
currentValue --; // On diminue la valeur du compteur
lastCoordY = newCoordY; // Et on met notre point "0" a jour
}
break;
Etape 3 : mettre à jour l'affichage, avec de la couleur suivant la valeur !
A insérer à la suite du code précédent, dans la même fonction, après la fin du switch ! De cette manière l'affichage sera mis à jour en temps réel, et non lors du retrait du doigt de l'écran (meilleure visualisation).
- Code: Select All Code
int c;
// J'ai choisi ici d'afficher en vert la valeur si elle est supérieure à 10, en jaune si elle est supérieure à 5 et inférieure à 10 et en rouge sinon.
if (currentValue > 10) c = Color.GREEN;
else if (currentValue > 5) c = Color.YELLOW;
else c = Color.RED;
tv.setTextColor(c);
// Puis on met à jour l'affichage de la valeur avec la nouvelle valeur
tv.setText(currentValue + "");
J'espère que vous aurez apprécié ce tuto, si vous avez des commentaires ou des problèmes avec, je reste à votre disposition.
Le code source complet du compteur montré en exemple est disponible ici :
http://www.elviish.eu/Tutos/compteur.java
Dernière édition par PLUM2010 le 03 Aoû 2010, 23:32, édité 3 fois.
Mes tutos Android (en Français) : http://www.thinkdroid.eu
-
Viish
Gamer du Dimanche
- Messages: 21
- Inscription: 03 Aoû 2010, 00:05
- Localisation: Grenoble
- Prénom: Sylvain
- Pays: France
- Sexe: Homme
