android - Swipe an item in listView along finger -


i want swipe item in expandablelistview , push offscreen. can now, action performs when swipe gesture ends , i want move finger gmail new app when swipe email. (i have transparency translation increases) please me giving advice or tutorial link?

i have adapter extends baseexpandableadapter, class detecting swipe gesture , mainactivity

mainactivity class

public class mainactivity extends activity implements onscrolllistener{     expandablelistview lv1;     private customlistadapter cla;     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         lv1 = (expandablelistview) findviewbyid(r.id.list);         final swipedetector swipedetector = new swipedetector();         lv1.setontouchlistener(swipedetector);         cla = new customlistadapter(this);         adddata();         lv1.setadapter(cla);         lv1.setonscrolllistener(this);         lv1.setonchildclicklistener(new onchildclicklistener() {             @override             public boolean onchildclick(expandablelistview parent, view v,                     int groupposition, int childposition, long id) {                 object o = cla.getgroup(groupposition);                 matchresult m =((trnmseparator) o).getmatches().get(childposition);                 //int type = (integer) rowtype.get(position);                 if (swipedetector.swipedetected()){                     // onswipe action                     //toast.maketext(mainactivity.this, "swipe :" + " " + m , toast.length_short).show();                     float dest = 0;                     v = v.findviewbyid(r.id.match);                     float place = v.getx();                     if (swipedetector.getaction() == action.lr){                         if (place == 0) dest =  v.getwidth();                         else if (place > 0) dest = v.getwidth();                         else if (place < 0) dest = 0;                     }                      else if (swipedetector.getaction() == action.rl){                         if (place == 0) dest =  -v.getwidth();                         else if (place > 0) dest = 0;                         else if (place < 0) dest = -v.getwidth();                     }                      objectanimator oa = objectanimator.offloat(v, "x", dest);                     oa.setduration(700);                     oa.start();                     log.v("view type", v.tostring());                     return false;                 } else {                     // onitemclick action                     toast.maketext(mainactivity.this, "selected :" + " " + m, toast.length_short).show();                     return true;                 }             }         });          lv1.setongroupclicklistener(new ongroupclicklistener() {              @override             public boolean ongroupclick(expandablelistview parent, view v,                     int groupposition, long id) {                 if (swipedetector.swipedetected()){                     // onswipe action                     object o = lv1.getitematposition(groupposition);                     toast.maketext(mainactivity.this, "swipe :" + " " + o , toast.length_short).show();                     return true;                 }                 if (lv1.isgroupexpanded(groupposition)){                     object o = cla.getgroup(groupposition);                     log.v("type", o.getclass().tostring());                     (int = 0; < ((trnmseparator) o).getmatches().size(); i++){                         lv1.getchildat(i).setx(0f);                     }                 }                 return false;             }         });          lv1.setonitemlongclicklistener(new onitemlongclicklistener() {             @override             public boolean onitemlongclick(adapterview<?> arg0, view arg1,                     int arg2, long arg3) {                 toast.maketext(mainactivity.this, "long press" + lv1.getitematposition(arg2), toast.length_short).show();                 return false;             }         });     }      @override     public void onscroll(abslistview view, int firstvisibleitem,             int visibleitemcount, int totalitemcount) {         // todo auto-generated method stub         boolean loadmore = firstvisibleitem + visibleitemcount >= totalitemcount;  //maybe add padding          if(loadmore) {             adddata();             //cla.count += visibleitemcount; // or other amount             cla.notifydatasetchanged();         }     } } 

and swipe detector

package com.example.jadidtar;  import android.util.log; import android.view.motionevent; import android.view.view;  public class swipedetector implements view.ontouchlistener {     public static enum action {         lr, // left right         rl, // right left         none // when no action detected     }      private static final string logtag = "swipedetector";     private static final int horizontal_min_distance = 100;     private float downx, downy, upx, upy;     private action mswipedetected = action.none;      public boolean swipedetected() {         return mswipedetected != action.none;     }      public action getaction() {         return mswipedetected;     }      public boolean ontouch(view v, motionevent event) {         switch (event.getaction()) {             case motionevent.action_down: {                 downx = event.getx();                 downy = event.gety();                 mswipedetected = action.none;                 return false; // allow other events click processed             }             case motionevent.action_move: {                 upx = event.getx();                 upy = event.gety();                  float deltax = downx - upx;                 float deltay = downy - upy;                  // horizontal swipe detection                 if (math.abs(deltax) > horizontal_min_distance) {                     // left or right                     if (deltax < 0) {                         mswipedetected = action.lr;                         return true;                     }                     if (deltax > 0) {                         mswipedetected = action.rl;                         return true;                     }                 }                  return false;             }         }         return false;     } } 

here part of code im using same want. use ontouchlistner on (linearlayout) object (wich listview row) :

velocitytracker _velocitytracker; int _slop;   viewconfiguration vc = viewconfiguration.get(context); _slop = vc.getscaledtouchslop();   [.........code ......]  _dividerrow.setontouchlistener(new mygesturelistener()                 );   class mygesturelistener implements ontouchlistener{         private pointf _init;         @override         public boolean ontouch(view v, motionevent event) {              switch(event.getaction())             {             case motionevent.action_down :                 _init = new pointf(event.getrawx(), event.getrawy());                 if(!(v == null))                 {                     _velocitytracker = velocitytracker.obtain();                     _velocitytracker.addmovement(event);                 }                  break;              case motionevent.action_up :                 break;              case motionevent.action_move :                 if(event.getx() > 0)                 {                         _velocitytracker.addmovement(event);                         float diffx = event.getrawx() - _init.x;                         float diffy = event.getrawy() - _init.y;                          if (math.abs(diffx) > _slop && math.abs(diffx) > math.abs(diffy)) {                             _swipping = true;                             ((viewgroup) v).requestdisallowintercepttouchevent(true);                              motionevent cancelevent = motionevent.obtain(event);                             cancelevent.setaction(motionevent.action_cancel | (event.getactionindex() << motionevent.action_pointer_index_shift));                             v.ontouchevent(cancelevent);                         }                           if(_swipping == true)                         {                              viewhelper.settranslationx(v, diffx);                         }                     }                  break;             }             return false;         }     } 

hope helps


Comments