2016-07-30 9 views
0

Wenn ich meinen Finger auf einen Knopf drücke und ihn dann außerhalb der Grenzen des Knopfes bewege, feuert der onTouchListener weiter.Android-Taste onTouchListener feuern äußere Grenzen

Das gleiche passiert, wenn ich einen Finger auf den Knopf und einen zweiten Finger außerhalb der Taste drücke: Meine onTouchListener feuert für den zweiten Finger.

Wie kann ich dies vermeiden? Ich möchte meine onTouchListener nur auslösen, wenn ich innerhalb der Grenzen eines Knopfes drücke.

Two fingers

One finger

Hier ist meine onTouchListener Implementierung

View.OnTouchListener onTouchListener = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     if (fingerDown) { 
      xHistoricalFirstFinger = (int) event.getX(); 
      yHistoricalFirstFinger = (int) event.getY(); 
      xFirstClick = xHistoricalFirstFinger; 
      yFirstClick = yHistoricalFirstFinger; 
      //counter++; 
      fingerDown = false; 
     } 
     x = (int) event.getX(); 
     y = (int) event.getY(); 

     Log.v("Touched", client.remoteAdress.toString()); 

     mouseMoveProvider.nextX = x - xHistoricalFirstFinger; 
     mouseMoveProvider.nextY = y - yHistoricalFirstFinger; 
     mouseMoveProvider.Ready = true; 
     xHistoricalFirstFinger = x; 
     yHistoricalFirstFinger = y; 

     if (event.getAction() == MotionEvent.ACTION_UP) { 
      if (x - xFirstClick == 0 & y - yFirstClick == 0) { 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          client.MakeMove(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
          NetworkListener.HandleNetworkIsUreachableException(context); 
         } 
        } 
       }).start(); 
      } 

      fingerDown = true; 

     } 
     return true; 
    } 
}; 
+0

Teilen Sie Ihre Touch-Listener-Implementierung. Irgendein Grund, warum nicht mit Click Listener gehen? – Shaishav

+0

Nein, ich brauche nur Hörer zu berühren – Kotelnikov

Antwort

0

Verwenden onClickListener?

onTouchListener wird für jede Berührung (Finger nach unten, Finger nach oben ...) Feuer

+0

Ich brauche nur berühren Listener, das Brennen nur innerhalb der Grenzen der Schaltfläche – Kotelnikov

+0

Ich denke, Sie könnten überprüfen, ob die Berührung Ereigniskoordinaten innerhalb der Ansicht sind. Haben Sie das noch nicht gemacht, aber schauen Sie sich nur die Dokumentation an, dann können Sie 'v.getDrawingRect(). Contains (event.getX(), event.getY())' was überprüft, ob Touch-Event-Koordinaten innerhalb des View-Rechtecks ​​sind - zurückgeben boolesch. – Gudin

+0

Ich habe darüber nachgedacht, aber Ihre Methode ist eine Art Workaround, nicht wahr? Gibt es elegantere Lösungen? – Kotelnikov

1

Ich denke, das Ihnen behilflich sein könnten:

User touch and drags out of button region

Grundsätzlich Sie auch überprüfen müssen ACTION_MOVE und sehen, ob die Berührung die Grenzen Ihres Rechtecks ​​verlassen hat. Ich hoffe das hilft.