OnTouchEvent erweiterung ... ?

Started by SteveRaphaellos, December 14, 2013, 11:25:46 PM

Previous topic - Next topic

SteveRaphaellos

Hallo Community,
was brauche ich, um ein Objekt sich solange bewegen zu lassen, wie der Finger an Position (x+-50/y+-50) ist (bei "boolean onTouchEvent(MotionEvent e)")?
Ich meine MotionEvent.ACTION_MOVE ist nicht das wirklich richtige, da ich den Finger auf dem gemalten Button immer hin und her bewegen müsste,
ich möchte aber eine Spielsteuerung in der man den Finger nur auf den Button halten muss...
Ich hab's mit 'ner while-Schleife mit der Bedinung getAction()!=MotionEvent.ACTION_UP probiert, läuft aber irgendwie falsch.^^
Die wird dann leider zur Endlosschleife ...

Danke im Vorraus :)
LG SteveRaphaellos

EgonOlsen

#1
Du kannst im Touch-Event-Listener keine Schleifen in dieser Art machen...damit blockierst du den Eventhread und damit die ganze Activity. Du musst doch nur eine Mischung auf up, down und move benutzen. Bei down merkst du dir die Koordinaten, bei move passt du sie entsprechend an (sofern sie denn überhautp wichtig sind) und bei down up ist der Spaß beendet. Einfach im Listener entsprechende Flags setzen.

SteveRaphaellos

#2
"bei move passt du sie entsprechend an (sofern sie denn überhautp wichtig sind) und bei >>down<< ist der Spaß beendet."

Du meinst up und nicht down.^^
Ich habs auch mit nem Thread probiert, läuft einfach nicht wie ichs will.
Aber du verstehst mich glaub ich falsch, bewegen kann ich ja das Objekt, nur ich will nicht die ganze Zeit meinen Finger im Kreis bewegen müssen...
Also ich hab sowas :

@Override
   public boolean onTouchEvent(MotionEvent me) {
      float meX = me.getX();
      float meY = me.getY();
      
      if(meX >= buttonPadding && meX <= buttonPadding+buttonWidth &&
         meY <= displayHeight-buttonPadding && meY >= displayHeight-buttonPadding-buttonHeight) {
         if(me.getAction() == MotionEvent.ACTION_DOWN) {
            touchTurn = -90;    //nach links drehen
            changeMode("left");
         }
      } else if(meX >= displayWidth-buttonPadding-buttonWidth && meX <= displayWidth-buttonPadding) {
         if(meY <= displayHeight-buttonPadding && meY >= displayHeight-buttonPadding-buttonHeight) {
            if(me.getAction() == MotionEvent.ACTION_DOWN) {
               touchTurn = 90;   //nach rechts drehen
               changeMode("right");
            }
         } else if(meY >= displayHeight-buttonPadding*2-buttonHeight*2 && meY <= displayHeight-buttonPadding*2-buttonHeight) {            
            moveVar = 10;   //bewegen
         }
      }
      return super.onTouchEvent(me);
   }

EgonOlsen

Ja, stimmt natürlich..up...ist korrigiert. Ich denke schon, dass ich kapiert habe was du willst. Ich schaffe wohl nur nicht, das gut rüberzubringen. Also was ich meine:


  • down-Event: Flag "move" auf true setzen (oder was halt bei dir passt, aber so im Prinzip).
  • move-Event: Entweder irgendwas anpassen (wenn die Fingerposition wichtig ist) oder einfach nichts tun.
  • up-Event: Flag "move" wieder auf false.

In der eigentlichen Logik fragst du dann in jedem Frame "move" ab und machst entsprechend das, was du so machen willst...

SteveRaphaellos

Ich werd's ausprobieren und in 'nem Edit schreiben ob's geklappt hat... ;)
LG SteveRaphaellos