IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Button / OnTouchListener et Motion Event


Sujet :

Android

  1. #1
    Invité
    Invité(e)
    Par défaut Button / OnTouchListener et Motion Event
    Bonjour,

    Novice dans le développement JAVA et Android, j'aurais besoin d'un peu d'aide.

    Je souhaite créer une application pour mon bout de chou qui a 1 an !! Et pour "m'entrainer" je voulais fabriquer un xylophone (oui je sais il y en a des gratuits, mais ça ne m'aide pas à m'entrainer ;p)

    Donc, j'ai créer mes 8 boutons, qui font du son sans souci à chaque "onClickListener", à l'aide du Sound Pool (parce qu'avec mediaPlayer ça me faisait tout planter quand j'allais vite)

    Par contre, je souhaiterais que le son se produise quand il "touche l'écran". Je suis donc passé au "OnTouchListener". Seul bémole, j'aimerais, sans qu'il ait à lever le doigt, qu'il passe à celui d'à coté et que ça joue le nouveau son, sans qu'il ait besoin de relever le doigt.

    J'ai donc fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	 boutondo1.setOnTouchListener(new OnTouchListener() 
             { 
    			@Override 
    			public boolean onTouch(View v, MotionEvent event) { 
    				int action = event.getActionMasked();
    				if (action == MotionEvent.ACTION_DOWN)
    				{
    					soundPool.play(soundID, 1, 1, 0, 0, 1);	
    				}
    			return true; 
    			            } 
     
    			    });
    J'ai tenté d'autres choses pour le ACTION_DOWN mais rien ne me va. Je m'explique :

    ACTION_DOWN, c'est comme un onClick.
    ACTION_UP aucun intéret c'est quand il lève le doigt :s
    ACTION_MOVE : ça spam le son .... inutile donc.

    J'aimerais que le son se joue 'une seule fois' mais que lorsque mon doigt glisse sur celui d'à coté, ça joue le nouveau son, sans avoir du coup un "action_down" puisque le doigt est déjà sur l'écran.

    Je pensais qu'il existait une sorte de "ACTION_IN" et "ACTION_OUT" quand le doigt arrivait "dans" la zone ou "sortait" de la zone mais .... non

    J'ai tenté le "ACTION_OUTSIDE", je pensais que c'était justement ça mais apparemment non ...

    Si quelqu'un pouvait m'éclairer

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Je pense malheureusement que le widget Button n'est pas adapté à tes besoins.
    Si tu ajoute un quelconque listener (OnTouchListener par exemple), il est lié à une vue (un bouton dans ton cas).
    Ce listener ne pourra donc te prévenir que des actions effectuée sur cette vue.

    Tu vas certainement devoir créer ton composant personnalisé. Une vue qui hérite de View par exemple. Dans laquelle sur va pouvoir ajouter un listener. Cette vue devra dessiner des touches (des simples rectangles en fait). Et en fonction des coordonnées du Touch, en déduire la touche correspondante.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Merci pour ta réponse !

    Alors, je crois comprendre en gros ce que tu m'as expliqué.

    Effectivement, après réflexion, il est logique qu'il ne prenne en compte des actions uniquement sur le "bouton", mais je pensais qu'une action "arrivante" ou "sortante" du touch pouvait fonctionner :s

    Donc si j'ai bien compris, je dois faire une vue (avec des ImageView? dans mon layout simplement ?). Mais comment définir ces coordonnées ?

    On ne peut définir simplement un layout (avec comme background mon rectangle rouge par exemple), et faire le son "si on passe le doit dessus" ?

    Je suis un peu perdu du coup

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Citation Envoyé par dragonsky51 Voir le message
    Donc si j'ai bien compris, je dois faire une vue (avec des ImageView? dans mon layout simplement ?). Mais comment définir ces coordonnées ?

    On ne peut définir simplement un layout (avec comme background mon rectangle rouge par exemple), et faire le son "si on passe le doit dessus" ?

    Je suis un peu perdu du coup
    Non, pas tout à fait. En tout cas, à ma connaissance, il n'est pas possible des faire suivre ces events d'une vue à l'autre.

    Regarde ce tuto et tu comprendras peut être mieux.
    https://developer.android.com/traini...eate-view.html
    Télécharge le projet donné en exemple. Il s'agit de faire un graphique de type camembert. Tu comprendras ainsi comment créer une vue personnalisée, dessiner des bloc (les touches pour toi), et interagir avec les évenements.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/03/2008, 09h35
  2. [Event] Mouse motion -> MOUSEUP
    Par Math3o dans le forum SDL
    Réponses: 2
    Dernier message: 23/02/2008, 19h34
  3. Event sur Tspeed button
    Par cfdev dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/01/2008, 12h05
  4. Event enable button
    Par jhonnyBravo dans le forum wxPython
    Réponses: 3
    Dernier message: 12/06/2007, 19h33
  5. UserControl : event on click button
    Par breezer911 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/03/2007, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo