8

Próbuję zaimplementować gest "przesunąć palcem od lewej do prawej strony", który jest obecny dla powiadomień w Androidzie ICS i nowszych wersjach. Mam listview w mojej aplikacji. Mam działający wykrywacz gestów. ALE kiedy przesuwaj od lewej do prawej na konkretnym elemencie listy, chcę, aby element przesuwał się wraz z palcem. Gdy przesuniemy palec, poza pewien punkt, tylko wtedy element powinien sam się usunąć. Metoda OnFling() Obecnie nie osiągam tego.Android "przesuń palcem od lewej do prawej, aby usunąć", gest na elemencie listy, styl ICS

Jak zmodyfikować metodę OnFling(), aby element poruszał się wraz z palcem?

My Gest klasa słuchacz jest

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

Jeżeli nie zostało to zrobione, warto zajrzeć na realizację Roman Nurik za: https: // oraz .google.com/113735310430199015092/posts/Fgo1p5uWZLu lub backport Jake'a Whartona za pomocą NineOldAndroids: https://github.com/JakeWharton/SwipeToDismissNOA – CommonsWare

Odpowiedz

5

Trzeba spojrzeć na machnięcia Roman Nurik do odwoływania fragment na github jeśli chcesz realizować tego typu funkcjonalności. Możesz go znaleźć here.

+0

Pomogło! Dzięki – newbie

+0

Autor Swipe-To-Dismiss (Tim Roes) opublikował nową wersję o nazwie EnhancedListView: https://github.com/timroes/EnhancedListView. Możesz nawet pobrać wersję demo ze Sklepu Play. – Samoht

+0

Używam tego samego, ale element listview nie przesuwa się płynnie Mam na myśli to, że użytkownik przesuwa lekko w dół, a następnie nie jest wykrywane działanie przesunięcia. Każda pomoc jest doceniana. Z góry dziękuję – Awadesh

2

Jeśli jesteś w stanie używać nowszej biblioteki wsparcia, RecyclerView ma jakąś wbudowaną funkcjonalność w postaci ItemTouchHelper oraz metodę onSwiped które mogą dać pożądane zachowanie.

że wsparcie rozpoczął w v22.2.0 biblioteki wsparcia RecyclerView zgodnie z tym bardzo pomocne odpowiedzi: https://stackoverflow.com/a/30601554/1518546

Powiązane problemy