Je suis assez nouveau à la programmation Android et Java (bien que j'ai une certaine expérience avec c #, cela aide).
À ce moment-là, je suis en train de monter avec quelques choses à savoir comment tout fonctionne. J'ai fait une activité qui implémente Ontchlistener. J'ai remplacé ONTOUD et avoir un commutateur sur event.getating (): p> où "cercle" est une classe qui dessine un cercle. P> Ce que je m'attendais à voir, c'était une traînée de cercles alors que j'ai traîné mon doigt sur l'écran. Au lieu de la place, le cercle n'est étiré que lorsque je commence à toucher. P> J'ai comparé mon code à des exemples (par exemple: ce blogpost de Google: http://androïde-developers.blogspot.com/2010/06/making-sense-of-multitouch.html < / a>) Et je ne peux pas trouver mon erreur. P> EDIT:
Lien vers la classe complète:
http://pastebin.com/tvdqjqhu p> EDIT:
Fixé. Il faut revenir en vrais dans la fonction d'Ontch (). d'oh! p> p>
4 Réponses :
J'avais le même problème lors de l'utilisation de motionEvent.action_move code>.
Pour
motionEvent.action_move code> pour fonctionner, retourne vrai au lieu de false. P>
+1 Avez-vous une idée pourquoi c'est comme ça que ça marche? Pourriez-vous nous signaler dans la direction où cela est documenté, un endroit où il y aurait une explication? Merci!
Lorsque vous remplacez l'OOULETOUVENT, le Boolean Votre retour Boolean indique si l'événement était consommé ou non.
avait aussi eu les mêmes problèmes, je ne sais pas si c'est un bug ou non, mais j'ai réussi à le faire fonctionner en ajoutant onclicklistener code> à la mise en œuvre et implémentant
annulation publique onclick (Afficher v) code> Ajoutez également
setonclicklistener (this) code> sur le constructeur. P>
Pour moi, la solution était
public boolean onTouch(View v, MotionEvent event){ float x; float y; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // gets called { x = event.getX(); y = event.getY(); circle c = new circle(this, x, y, 10, 0xFFFFFF); _main.addView(c, tapCount++); break; } case MotionEvent.ACTION_MOVE: // doesnt seem to do anything { x = event.getX(); y = event.getY(); circle c = new circle(this, x, y, 10, 0xFFFFFF); _main.addView(c, tapCount++); break; } } return true; //the problem was here
Vous devez utiliser le retour VRAI pour chaque événement. Si vous utilisez seulement une seule fois, seulement Action_Down appellera. Cela vous aidera.
@Override public boolean onTouchEvent(MotionEvent event) { final float X = event.getX(); final float Y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: x = X; y = Y; invalidate(); return true; case MotionEvent.ACTION_MOVE: x = X; y = Y; invalidate(); return true; case MotionEvent.ACTION_UP: invalidate(); return true; } return super.onTouchEvent(event); }
Pourquoi reviendriez-vous faux d'AOUTOTOUCH?