Scale limits on pinch zoom of android -


how set max , min zoom levels pinch-zoom?


here code: //

public class touchimageview extends imageview {       private static final string tag = "touch";          // these matrices used move , zoom image         matrix matrix = new matrix();         matrix savedmatrix = new matrix();         static pinchzoomexample spinchzoomexample = null;         // can in 1 of these 3 states         static final int none = 0;         static final int drag = 1;         static final int zoom = 2;         int mode = none;         static bitmap scurrentimage;          // remember things zooming         pointf start = new pointf();         pointf mid = new pointf();         float olddist = 1f;          context context;           public touchimageview(context context) {             super(context);             super.setclickable(true);             this.context = context;              matrix.settranslate(1f, 1f);             setimagematrix(matrix);             setscaletype(scaletype.matrix);              setontouchlistener(new ontouchlistener() {                  @override                 public boolean ontouch(view v, motionevent rawevent) {                     wrapmotionevent event = wrapmotionevent.wrap(rawevent);                      // dump touch event log                    /* if (viewer.isdebug == true){                         dumpevent(event);                     }*/                      // handle touch events here...                     switch (event.getaction() & motionevent.action_mask) {                     case motionevent.action_down:                         savedmatrix.set(matrix);                         start.set(event.getx(), event.gety());                         log.d(tag, "mode=drag");                         mode = drag;                         break;                     case motionevent.action_pointer_down:                         olddist = spacing(event);                         log.d(tag, "olddist=" + olddist);                         if (olddist > 10f) {                             savedmatrix.set(matrix);                             midpoint(mid, event);                             mode = zoom;                             log.d(tag, "mode=zoom");                         }                         break;                     case motionevent.action_up:                         int xdiff = (int) math.abs(event.getx() - start.x);                         int ydiff = (int) math.abs(event.gety() - start.y);                         if (xdiff < 8 && ydiff < 8){                             performclick();                             spinchzoomexample.displaygallery();                         }                     case motionevent.action_pointer_up:                         mode = none;                         log.d(tag, "mode=none");                         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) {                             float newdist = spacing(event);                             log.d(tag, "newdist=" + newdist);                             if (newdist > 10f) {                                 matrix.set(savedmatrix);                                 float scale = newdist / olddist;                                  matrix.postscale(scale, scale, mid.x, mid.y);                                  //canvas canvas = new canvas();  //                              bitmap bm = bitmap.createbitmap(scurrentimage,0, 0, scurrentimage.getwidth() //                                      , scurrentimage.getheight(), matrix, true);                                 log.d("scale", "scale=" + scale + "  " + getwidth() + "  " + getheight());                                 //bm.recycle();                             }                         }                         break;                     }                      setimagematrix(matrix);                     return true; // indicate event handled                 }              });         }           public void setimage(bitmap bm, int displaywidth, int displayheight , pinchzoomexample pze) {              super.setimagebitmap(bm);             scurrentimage = bm;             spinchzoomexample = pze;             //fit screen.             float scale;             if ((displayheight / bm.getheight()) >= (displaywidth / bm.getwidth())){                 scale =  (float)displaywidth / (float)bm.getwidth();             } else {                 scale = (float)displayheight / (float)bm.getheight();             }              savedmatrix.set(matrix);             matrix.set(savedmatrix);             matrix.postscale(scale, scale, mid.x, mid.y);             setimagematrix(matrix);               // center image             float redundantyspace = (float)displayheight - (scale * (float)bm.getheight()) ;             float redundantxspace = (float)displaywidth - (scale * (float)bm.getwidth());              redundantyspace /= (float)2;             redundantxspace /= (float)2;               savedmatrix.set(matrix);             matrix.set(savedmatrix);             matrix.posttranslate(redundantxspace, redundantyspace);   //matrix.posttranslate(50, 50);             setimagematrix(matrix);           }             /** determine space between first 2 fingers */         private float spacing(wrapmotionevent event) {             // ...             float x = event.getx(0) - event.getx(1);             float y = event.gety(0) - event.gety(1);             return floatmath.sqrt(x * x + y * y);         }          /** calculate mid point of first 2 fingers */         private void midpoint(pointf point, wrapmotionevent event) {             // ...             float x = event.getx(0) + event.getx(1);             float y = event.gety(0) + event.gety(1);             point.set(x / 2, y / 2);         }  } 

private static final float min_zoom = 1.0f; private static final float max_zoom = 5.0f;  scale = math.max(min_zoom, math.min(scale, max_zoom)); 

Comments

Popular posts from this blog

unicode - Are email addresses allowed to contain non-alphanumeric characters? -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

c++ - Convert big endian to little endian when reading from a binary file -