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
Post a Comment