8

Ich versuche, die Geste "wischen von links nach rechts zu löschen" zu implementieren, die für die Benachrichtigungen in Android ICS und höher vorhanden ist. Ich habe eine Listenansicht in meiner Anwendung. Ich arbeite mit dem Gesten-Detektor. ABER wenn ich auf einem bestimmten Listenelement von links nach rechts wische, möchte ich, dass sich das Objekt mit meinem Finger bewegt. Wenn ich meinen Finger über einen bestimmten Punkt hinaus bewege, dann sollte sich das Objekt selbst löschen. Die OnFling() Methode Das habe ich derzeit nicht erreicht.Android "Swipe von links nach rechts zu löschen", Gesten auf Listenelement, ICS-Stil

Wie kann ich die OnFling() -Methode ändern, damit sich der Gegenstand mit meinem Finger bewegt?

My Gesture-Listener-Klasse ist

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

Wenn Sie dies noch nicht getan haben, bei Roman Nurik Implementierung Sie vielleicht spähen: https: // Plus .google.com/113735310430199015092/posts/Fgo1p5uWZLu oder Jake Whartons Backport mit NineOldAndroids: https://github.com/JakeWharton/SwipeToDismissNOA – CommonsWare

Antwort

5

Sie sollten einen Blick auf Roman Nurik des Swipe haben Schnipsel bei Github zu entlassen, wenn Sie diese Art von Funktionalität implementieren möchten. Sie können es finden here.

+0

Dies half! Danke – newbie

+0

Der Autor von Swipe-To-Dismiss (Tim Roes) hat eine neue Version namens EnhancedListView veröffentlicht: https://github.com/timroes/EnhancedListView. Sie können sogar eine Demo im Play Store herunterladen. – Samoht

+0

Ich benutze die gleiche, aber Listview-Element ist nicht reibungslos gleiten ich meine, wenn Benutzer wischen leicht nach unten, dann Swipe-Aktion wird nicht erkannt. Jede Hilfe wird geschätzt. Danke im Voraus – Awadesh

2

Wenn Sie in der Lage sind eine neuere Support-Bibliothek zu verwenden, RecyclerView hat einige eingebaute Funktionalität in Form von ItemTouchHelper und die onSwiped Methode, die Ihnen das gewünschte Verhalten geben kann.

Das in v22.2.0 der RecyclerView Support-Bibliothek gestartet unterstützen nach dieser sehr hilfreiche Antwort: https://stackoverflow.com/a/30601554/1518546

Verwandte Themen