android - Losing ACTION_DOWN parameters when InterceptTouchEvent -
i have parent view should follow finger on touch , child view inside clickable. used onintercepttouchevent decide if have consume touch event on parent or child comparing touch distance before action_up.
obviously used "retrun false" on action_down in onintercepttouchevent (because propagate event before calculations) unfortunately ontouch loses action_down.
the question how can initialize parameters (as initial position of parent view) ontouch (not onintercepttouchevent)?
footnote: reason have write ontouch inline other codes have implemented onintercepttouchevent inside object definition.
a part of object definition:
boolean mmisbeingdragged; float mlastx; float mstartx; int mtouchslop=viewconfiguration.get(getcontext()).getscaledtouchslop(); @override public boolean onintercepttouchevent(motionevent event) { switch (event.getaction()) { case motionevent.action_down: mlastx = event.getx(); mstartx = mlastx; break; case motionevent.action_move: float x = event.getx(); float y = event.gety(); float xdelta = math.abs(x - mlastx); float xdeltatotal = x - mstartx; if (math.abs(xdeltatotal) > mtouchslop) { mmisbeingdragged = true; mstartx = x; return true; } break; case motionevent.action_cancel: case motionevent.action_up: mmisbeingdragged = false; break; } return false; }
and ontouch defined outside of object (inline program)
myview.setontouchlistener(new ontouchlistener() { float curx=0; float oldx; float startx; float delta=0; float togo; boolean misbeingdragged=false; int mtouchslop=viewconfiguration.get(getactivity()).getscaledtouchslop(); @override public boolean ontouch(final view v, motionevent event) { switch (event.getaction()) { case motionevent.action_down: //here prblem! how initialize startx? case motionevent.action_move: curx = event.getrawx(); delta=curx-startx; togo=oldx+delta; if (math.abs(delta) > mtouchslop) { misbeingdragged=true; followfingerfunction(v,togo) return true; } break; case motionevent.action_up: if (!misbeingdragged){v.performclick();} break; } return true; } });
just expose mstartx activity. ( know not perfect seems ok).
class parentview extends viewgroup (or other viewgroup) { int startx; public int getstartx(){ return startx; } }
// after call getstartx() activity.
Comments
Post a Comment