开发者

Android Multi touch zooming

I am trying to implement multi touch zoom in and zoom out functionality to my application. My application is to view an slideshow of images. I tried to implement multi touch zoom functionalities from the link following开发者_StackOverflow中文版 http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-6-implementing-the-pinch-zoom-gesture/1847 ,its actually a good one but I need to control the zoom in and zoom out. i.e I want to implement an maximum and minimum limit for zoom. Can anybody help me to solve this issue. Also thanks in advance to looking into this issue.


In my search and coding for the zooming imageview I came across a widget that is exactly copy of Gallery app zooming feature its easy to use. Although I have devised my own zoom Iamgeview but later I find its not agood thing to re- invent the wheel below is the link

Courtesy: Alessandro Crugnola

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/


Sure, you'll need to change this part:

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);
      }
}

to

else if (mode == ZOOM) {
      float newDist = spacing(event);
      Log.d(TAG, "newDist=" + newDist);
      if (newDist > 10f) {
         matrix.set(savedMatrix);
         float scale = newDist / oldDist;

         // check scale is not too big or two small
         float newScale = scale*mCurrentScale;
         if (newScale > 10) {
             return false;
         } else if (newScale < 0.1) {
             return false;
         }
         mCurrentScale = newScale;

         matrix.postScale(scale, scale, mid.x, mid.y);
      }
}

and also add a variable mCurrentScale to your activity to remember to current scale like so:

public class Touch extends Activity implements OnTouchListener {
   // These matrices will be used to move and zoom image
   Matrix matrix = new Matrix();
   Matrix savedMatrix = new Matrix();

   // this is the new variable added
   float mCurrentScale = 1.0f;

...


This fixed the problem for me. After the image is zoomed in/out to the limit, it just stops going further. It's also smooth and there are no lags. 0.7 and 2.0 are the minimum and maximum zoom levels.

....
} else if (mode == ZOOM) {
    float[] f = new float[9];

    float newDist = spacing(event);
    if (newDist > 10f) {
            matrix.set(savedMatrix);
            float tScale = newDist / dist;
            matrix.postScale(tScale, tScale, mid.x, mid.y);
    }

    matrix.getValues(f);
    float scaleX = f[Matrix.MSCALE_X];
    float scaleY = f[Matrix.MSCALE_Y];

    if(scaleX <= 0.7f)
            matrix.postScale((0.7f)/scaleX, (0.7f)/scaleY, mid.x, mid.y);
    else if(scaleX >= 2.5f) 
            matrix.postScale((2.5f)/scaleX, (2.5f)/scaleY, mid.x, mid.y);

    }
....        
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜