2017-01-14 3 views
1

Ich möchte ein einfaches Spiel für Android erstellen, wo der Spieler eine Tabelle mit Schaltflächen angezeigt wird. Er sollte die Fähigkeit haben, seine Finger über einige Tasten zu ziehen und zu ziehen, und das Ergebnis seiner Bewegung sollte nur angezeigt werden, nachdem er aufhört, den Bildschirm zu berühren.Hover/Swipe über eine Schaltfläche

Ich kann sehen, wenn Action_UP und Action_Down genannt wird, aber ich kann Action_HOVER_MOVE nicht verwenden:

View.OnTouchListener OTL = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) {   

     if (motionEvent.getAction()==MotionEvent.ACTION_DOWN 
       || motionEvent.getAction()==MotionEvent.ACTION_HOVER_MOVE) 

     { 
      Button B = (Button)view; 
      if (B.isActivated()) 
      { 
       String letter = B.getText()+""; 
       word+=letter; 
      } 
      B.setActivated(false); 
      Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT); 
      t.show(); 

     } 
     if (motionEvent.getAction()==MotionEvent.ACTION_UP) 
     { 
      Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT); 
      t.show(); 
      word=""; 
      resetButtons(); 
     } 

     return true; 
    } 
}; 

Wie Swipe über andere Tasten erkennen?

+0

Dies ist eine ziemlich gute Frage für Leute, die verwirrt sind, warum ACTION_HOVER_MOVE nicht funktioniert, die nicht für die Menschen auf Mausereignisse verwendet offensichtlich sein könnten. –

Antwort

1

Per Docs, werden Sie wahrscheinlich wollen ACTION_MOVE

int ACTION_MOVE
Konstante für getActionMasked(): Eine Änderung während einer Presse Geste (zwischen ACTION_DOWN und ACTION_UP) geschehen ist. Die Bewegung enthält den letzten Punkt sowie etwaige Zwischenpunkte seit dem letzten Ereignis "Ablegen" oder "Bewegen".

Sie Probleme mit ACTION_HOVER_MOVE weil:

int ACTION_HOVER_MOVE
Konstante für getActionMasked(): Eine Änderung passiert ist, aber der Zeiger nicht nach unten (im Gegensatz zu ACTION_MOVE). Die Bewegung enthält den letzten Punkt sowie Zwischenpunkte seit dem letzten Hovermove-Ereignis.

Diese Aktion wird immer an das Fenster oder die Ansicht unter dem Zeiger übergeben.

Diese Aktion ist kein Berührungsereignis, daher wird sie an onGenericMotionEvent (MotionEvent) und nicht anTouchEvent (MotionEvent) übermittelt.

Quelle: https://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE

Verwandte Themen