so i'm trying view working many different ways, there should be:
- multitouch zooming
- touchlistener panning
- doubleclick restoring zoom
- or if it's restored zoom place double click was.
at moment, else working when doubleclick , keep second click down , continue moving code working way first restores/zooms , panning starts.
so because of zoomscale, first change size of canvas , start panning. should enable panning after double click noticed? or check if double click's last click keeps moving , skip zoom/restore thing? code looks atm. , trying return false after doubleclick doesnt effect... there setting ignoremultitouch true, on double click or panning?
@override public boolean ontouchevent(motionevent ev) { if(mgesturedetector.ontouchevent(ev)){ montoucheventworkingarray[0] = ev.getx(); montoucheventworkingarray[1] = ev.gety(); montoucheventworkingarray = scaledpointstoscreenpoints(montoucheventworkingarray); ev.setlocation(montoucheventworkingarray[0], montoucheventworkingarray[1]); mscaledetector.ontouchevent(ev); final int action = ev.getaction(); switch (action & motionevent.action_mask) { case motionevent.action_down: { final float x = ev.getx(); final float y = ev.gety(); mlasttouchx = x; mlasttouchy = y; // save id of pointer mactivepointerid = ev.getpointerid(0); break; } case motionevent.action_move: { // find index of active pointer , fetch position final int pointerindex = ev.findpointerindex(mactivepointerid); final float x = ev.getx(pointerindex); final float y = ev.gety(pointerindex); final float dx = x - mlasttouchx; final float dy = y - mlasttouchy; mposx += dx; mposy += dy; mtranslatematrix.pretranslate(dx, dy); mtranslatematrix.invert(mtranslatematrixinverse); mlasttouchx = x; mlasttouchy = y; normal = false; invalidate(); break; } case motionevent.action_up: { mactivepointerid = invalid_pointer_id; break; } case motionevent.action_cancel: { mactivepointerid = invalid_pointer_id; break; } case motionevent.action_pointer_up: { // extract index of pointer left touch sensor final int pointerindex = (action & motionevent.action_pointer_index_mask) >> motionevent.action_pointer_index_shift; final int pointerid = ev.getpointerid(pointerindex); if (pointerid == mactivepointerid) { // our active pointer going up. choose new // active pointer , adjust accordingly. final int newpointerindex = pointerindex == 0 ? 1 : 0; mlasttouchx = ev.getx(newpointerindex); mlasttouchy = ev.gety(newpointerindex); mactivepointerid = ev.getpointerid(newpointerindex); } break; } } } return true; } private class scalelistener extends scalegesturedetector.simpleonscalegesturelistener { @override public boolean onscale(scalegesturedetector detector) { mscalefactor *= detector.getscalefactor(); if (detector.isinprogress()) { mfocusx = detector.getfocusx(); mfocusy = detector.getfocusy(); } mscalefactor = math.max(0.75f, math.min(mscalefactor, 3.0f)); mscalematrix.setscale(mscalefactor, mscalefactor, mfocusx, mfocusy); mscalematrix.invert(mscalematrixinverse); invalidate(); requestlayout(); return true; } } private class gesturelistener extends gesturedetector.simpleongesturelistener { @override public boolean ondown(motionevent e) { return true; } // event when double tap occurs @override public boolean ondoubletap(motionevent e) { if (!normal) { restore(); } else { zoomtospot(e); } return false; } @override public boolean ondoubletapevent(motionevent e) { return true; } }
so made code working these little things, first added doubleclicked boolean
public boolean ondoubletap(motionevent e) { if (!normal) { restore(); } else { zoomtospot(e); } doubleclicked = true; return true; } then made 2 different ontouchevents , set first working if doubleclicked false. second 1 set doubleclicked false when there no fingers left on screen.
public boolean ontouchevent(motionevent ev) { final int action = ev.getaction(); if (!doubleclicked) { switch (action & motionevent.action_mask) { case motionevent.action_down: { //something... } } else { switch (action & motionevent.action_mask) { case motionevent.action_up: { doubleclicked = false; break; } } }
Comments
Post a Comment