Wie man ein TOUCH-Ereignis mit einem anderen Finger erkennt, während ein ACTION_MOVE in Bearbeitung ist

Ich entwickle ein Spiel und ich muss in der Lage sein zu erkennen, dass ein Finger eine MOVE durchführt, während ein anderer Finger ein weiterer Teil des Bildschirms erreichen kann.

Mit dem folgenden Code bin ich in der Lage, sowohl die ACTION_MOVE (auf bestimmten Bereich des Bildschirms) und die ACTION_DOWN zu erkennen

public boolean onTouch(View v, MotionEvent event) { final int dest_x = (int) event.getX(); final int dest_y = (int) event.getY(); onTrackPad = dbSettings.TRACK_PAD.contains(dest_x, dest_y); switch (event.getAction()) { case MotionEvent.ACTION_MOVE: if (onTrackPad) { //move character } break; case MotionEvent.ACTION_DOWN: // Fire bullets break; } //The event was consumed return true; } 

Das Problem ist, dass ich nicht in der Lage bin, mich zu bewegen und gleichzeitig zu schießen (ich muss aufhören zu bewegen, um zu schießen und umgekehrt)

Ich bin mir bewusst, dass Android Multi-Touch-Events verarbeiten kann, aber nicht daraus, wie man das benutzt, um diese Ereignisse und die gleiche Zeit verarbeiten zu können, damit der Spieler sich gleichzeitig bewegen und schießen kann

Ich habe auch versucht, die getActionMasked ohne Glück zu verwenden

  • Android - Wie man eine benannte Methode in button.setOnClickListener ()
  • Android und javafx leichtes kompatibles Event-Framework
  • Best Practice für die Definition von Button-Events in Android
  • Android Overriding onBackPressed ()
  • Erfassen Sie das Scroll-Ereignis auf dem Android-Browser
  • Implementiere mehrere Event-Listener im selben Fragment - Android
  • Android onScrollChanged für Scrollview gefeuert mehrere Male
  • Wie kann ich den EditText-Text ändern, ohne den Text Watcher auszulösen?
  • 3 Solutions collect form web for “Wie man ein TOUCH-Ereignis mit einem anderen Finger erkennt, während ein ACTION_MOVE in Bearbeitung ist”

    Nach dem Lesen dieser Frage Android MotionEvent.getActionIndex () und MultiTouch

    So habe ich das Problem gelöst

     public boolean onTouch(View v, MotionEvent event) { int dest_x ; int dest_y ; p = event.getActionIndex() ; dest_x = (int) event.getX(p); dest_y = (int) event.getY(p); onTrackPad = dbSettings.TRACK_PAD.contains(dest_x, dest_y); action = event.getActionMasked() ; switch (action) { case MotionEvent.ACTION_MOVE: if (onTrackPad) { //move character } break; case MotionEvent.ACTION_DOWN: // Fire bullets break; } //The event was consumed return true; } 

    Probieren Sie den Code aus. Wenn mehrere Zeiger auf dem Bildschirm berührt, erzeugt das System die Aktion events.we können die einzelnen Zeiger mit Bewegungsereignis mit Zeiger-ID verfolgen. Zeiger-ID bleibt über Berührungsereignisse bestehen und erlaubt auch, einzelne Zeiger über die gesamte Geste zu verfolgen.

      @Override public boolean onTouch(View v, MotionEvent event) { int index = event.getActionIndex(); int pointerID = event.getPointerId(index); int action = event.getActionMasked(); if(event.getPointerCount() > 1) { Log.i("TouchType ", "Multi Touch"); for(int i = 0; i < event.getPointerCount(); i++) { performAction(action); } }else { Log.i("TouchType ", "Single Touch"); performAction(action); } return true; } public void performAction(int action){ switch(action) { case MotionEvent.ACTION_DOWN : Log.i("OnTouch ", "Pressed"); // Fire bullets break; case MotionEvent.ACTION_MOVE : Log.i("OnTiouch", "move"); //move character break; case MotionEvent.ACTION_UP : Log.i("OnTiouch", "Up"); break; default: Log.i("OnTiouch", "None"); } } 

    MotionEvent hat alle Informationen über Berührungen, die Sie benötigen. Sie können die Anzahl der Berührungen erhalten, indem Sie event.getPointersCount() ausführen und versuchen, MotionEvent.ACTION_POINTER_2_DOWN anstelle von MotionEvent.ACTION_DOWN zu überprüfen. Um Koordinaten von jeder Note zu erhalten, kannst du event.getX(0) und event.getX(1) , das gleiche gilt für y . Wenn Sie einen Fall von MotionEvent.ACTION_MOVE mit 2 Berührungen haben, erhalten Sie alle diese Informationen in Ihrem Bewegungsereignis.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.