2012-08-07 26 views
6

ho la solita rivelatore gesto per rivelare fling, è attributo un'istanza di un SurfaceViewattuazione Fling su tela android

GestureDetector flingDetector = new GestureDetector(getContext(),new SimpleOnGestureListener() { 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
        // Fling implementation 
      return true; 
     } 
}); 

sto disegnando un sacco di cose complesse su un canvas e ho un metodo translate(dx,dy) che uso con onScroll.

Quindi la mia domanda è: come posso implementare l'evento con il metodo translate?

Sembra che ci siano molte domande su come individuare l'avventura, la mia domanda è sull'implementazione.

risposta

4

Non sono sicuro che questo risponderà alla tua domanda, ci proverò.

Controllare http://developer.android.com/reference/android/view/MotionEvent.html per MotionEvent.

È possibile utilizzare i due eventi ricevuti come e1 ed e2 sul metodo onFling e calcolare le differenze di coordinate con e1.getX(), e2.getX(), e1.getY(), e2.getY() .. .. Con questo avresti il ​​dx e dy da usare con translate (dx, dy).

Dal momento che l'avventura sembra più un gesto dinamico, è possibile decidere che il lancio significhi un movimento più ampio e applicare un fattore di amplificazione a dx e dy, in modo che quando l'utente scorre, ottengono un movimento preciso, ma in movimento , il movimento reale viene amplificato.

Se questo fattore dipende dalla velocità, si ha una risposta personalizzata per ogni input dell'utente.

(Una cosa diversa potrebbe animare il risultato, che credo dipenda da altre cose).

Un esempio potrei provare se si trattasse di me:

  • utente scorre dolcemente: Il movimento è dx, dy. Tradurre (dx, dy).
  • scaglia Utente:
    movimento reale: dx = (e2.getX() - e1.getX() dy = (e2.getY() - e1.getY() fattore Fling:.. (Implementazione personalizzata) . movimento Modificato: dxModified = dx * velocityX * F dyModified = dy * velocityY * F Infine:... tradurre (dxModified, dyModified)

    Spero che questo aiuti in qualche misura

    Edit: non ho rendersi conto che questa domanda era del 2012, speriamo che questo aiuti qualcuno per qualche tempo. Sarebbe bello sapere comunque dell'implementazione finale !.