8

Sto tentando di implementare il gesto "scorri da sinistra a destra per eliminare" presente per le notifiche su Android ICS e versioni successive. Ho una lista nella mia applicazione. Ho il rilevatore di gesti funzionante. MA quando faccio scorrere da sinistra a destra su un particolare elemento della lista, voglio che l'oggetto si muova insieme al mio dito. Quando muovo il mio dito, oltre un certo punto, solo allora l'oggetto si cancellerà da solo. Il metodo OnFling() Al momento non ho raggiunto questo obiettivo.Android "scorri da sinistra a destra per eliminare", gesto sulla voce di elenco, Stile ICS

Come posso modificare il metodo OnFling() per spostare l'elemento con il dito?

mio gesto classe ascoltatore è

class GestureListener extends SimpleOnGestureListener { 
     private static final int SWIPE_MIN_DISTANCE = 50; 
     private static final int SWIPE_MAX_OFF_PATH = 100; 
     private static final int SWIPE_THRESHOLD_VELOCITY = 25; 

     private MotionEvent mLastOnDownEvent = null; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      mLastOnDownEvent = e; 
      return super.onDown(e); 
     } 

     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "On Single TAP up ", Toast.LENGTH_SHORT).show(); 
      return super.onSingleTapUp(e); 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      if (e1 == null) { 
       e1 = mLastOnDownEvent; 
      } 
      if (e1 == null || e2 == null) { 
       return false; 
      } 

      float dX = e2.getX() - e1.getX(); 
      float dY = e1.getY() - e2.getY(); 

      if (Math.abs(dY) < SWIPE_MAX_OFF_PATH 
        && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY 
        && Math.abs(dX) >= SWIPE_MIN_DISTANCE) { 
       if (dX > 0) { 
        int position = tasks.pointToPosition((int) e1.getX(), 
          (int) e1.getY()); 

        int _id = (int) tasks.getItemIdAtPosition(position); 
        databaseConnector.deleteContact(_id); 

        new DeleteRow(_id, contactAdapter, getApplicationContext()); 
       contactAdapter.notifyDataSetChanged(); 


        Toast.makeText(getApplicationContext(), 
          "Right Swipe" + _id, Toast.LENGTH_SHORT).show(); 
       } else { 

        Toast.makeText(getApplicationContext(), "Left Swipe", 
          Toast.LENGTH_SHORT).show(); 
       } 
       return true; 
      } 

      return false; 
     } 
+1

Se non si è già fatto, si potrebbe desiderare di sbirciare implementazione di Roman Nurik: https: // più .google.com/113735310430199015092/posts/Fgo1p5uWZLu o il backport di Jake Wharton con NineOldAndroids: https://github.com/JakeWharton/SwipeToDismissNOA – CommonsWare

risposta

5

si dovrebbe avere uno sguardo al colpo di Roman Nurik di licenziare snippet github se si desidera implementare questo tipo di funzionalità. Lo puoi trovare here.

+0

Questo ha aiutato! Grazie – newbie

+0

L'autore di Swipe-To-Dismiss (Tim Roes) ha pubblicato una nuova versione chiamata EnhancedListView: https://github.com/timroes/EnhancedListView. Puoi persino scaricare una demo dal Play Store. – Samoht

+0

Sto usando la stessa voce ma listview non scorre in modo scorrevole intendo se l'utente scorre leggermente verso il basso, quindi l'azione swipe non viene rilevata. Qualsiasi aiuto è apprezzato. Grazie in anticipo – Awadesh

2

Se è possibile utilizzare una libreria di supporto più recente, RecyclerView ha alcune funzionalità incorporate nel formato ItemTouchHelper e il metodo onSwiped che può fornire il comportamento desiderato.

che il sostegno è iniziata nel v22.2.0 della libreria di supporto RecyclerView secondo questa risposta molto utile: https://stackoverflow.com/a/30601554/1518546