7
votes

Android: ne peut pas sembler utiliser motionEvent.action_move correctement

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 (): xxx

où "cercle" est une classe qui dessine un cercle.

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.

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.

EDIT: Lien vers la classe complète: http://pastebin.com/tvdqjqhu

EDIT: Fixé. Il faut revenir en vrais dans la fonction d'Ontch (). d'oh!


1 commentaires

Pourquoi reviendriez-vous faux d'AOUTOTOUCH?


4 Réponses :


45
votes

J'avais le même problème lors de l'utilisation de motionEvent.action_move . Pour motionEvent.action_move pour fonctionner, retourne vrai au lieu de false.


2 commentaires

+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.



1
votes

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 à la mise en œuvre et implémentant annulation publique onclick (Afficher v) Ajoutez également setonclicklistener (this) sur le constructeur.


0 commentaires

14
votes

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


0 commentaires

0
votes

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);
    }


0 commentaires