android imageview gesture rotate cause loss of quality for the edges -
i using below code drag,scale rotate image inside image view, , it's working fine problem when rotating image edges become fuzzy while image retain same quality , doesn't happen in scaling , please suggest solution, tanks,code:-
private void dragzoomrotate(imageview view, motionevent event){ view.setscaletype(imageview.scaletype.matrix); // handle touch events here... switch (event.getaction() & motionevent.action_mask) { case motionevent.action_down: savedmatrix.set(matrix); start.set(event.getx() , event.gety() ); mode = drag; lastevent = null; break; case motionevent.action_pointer_down: // first , second finger down olddist = spacing(event); savedmatrix.set(matrix); midpoint(mid, event); mode = zoom; lastevent = new float[4]; lastevent[0] = event.getx(0); lastevent[1] = event.getx(1); lastevent[2] = event.gety(0); lastevent[3] = event.gety(1); degrees = rotation(event); break; case motionevent.action_up: // first finger lifted case motionevent.action_pointer_up: // second finger lifted mode = none; lastevent = null; break; case motionevent.action_move: if (mode == drag) { // ... matrix.set(savedmatrix); matrix.posttranslate(event.getx() - start.x , event.gety() - start.y ); } else if (mode == zoom && event.getpointercount()==2) { float newdist = spacing(event); matrix.set(savedmatrix); if (newdist > 10f) { float scale = newdist / olddist; // matrix.postscale(scale, scale, mid.x, mid.y); } if (lastevent!=null){ newrot = rotation(event); float r = newrot-degrees; matrix.postrotate(r, view.getmeasuredwidth()/2, view.getmeasuredheight()/2); } } // break; } view.setimagematrix(matrix); } private float rotation(motionevent event) { double delta_x = (event.getx(0) - event.getx(1)); double delta_y = (event.gety(0) - event.gety(1)); double radians = math.atan2(delta_y, delta_x); return (float) math.todegrees(radians); } /* * -------------------------------------------------------------------------- * method: spacing parameters: motionevent returns: float description: * * checks spacing between 2 fingers on touch * ---------------------------------------------------- */ private float spacing(motionevent event) { float x = event.getx(0) - event.getx(1); float y = event.gety(0) - event.gety(1); return floatmath.sqrt(x * x + y * y); } /* * -------------------------------------------------------------------------- * method: midpoint parameters: pointf object, motionevent returns: void * description: calculates midpoint between 2 fingers * ------------------------------------------------------------ */ private void midpoint(pointf point, motionevent event) { float x = event.getx(0) + event.getx(1); float y = event.gety(0) + event.gety(1); point.set(x / 2, y / 2); }
Comments
Post a Comment