【问题标题】:Android Multi touch zoomingAndroid 多点触控缩放
【发布时间】:2011-05-12 11:16:11
【问题描述】:

我正在尝试为我的应用程序实现多点触控放大和缩小功能。我的应用程序是查看图像的幻灯片。我尝试通过http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-6-implementing-the-pinch-zoom-gesture/1847 之后的链接实现多点触控缩放功能,它实际上是一个不错的功能,但我需要控制放大和缩小。即我想实现缩放的最大和最小限制。谁能帮我解决这个问题。还要提前感谢您调查此问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    在我对缩放图像视图的搜索和编码中,我遇到了一个小部件,它完全是图库应用缩放功能的副本,它易于使用。虽然我已经设计了自己的缩放 Iamgeview 但后来我发现重新发明轮子并不是一件好事,下面是链接

    礼貌:亚历山德罗·克鲁尼奥拉

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

    【讨论】:

      【解决方案2】:

      当然,您需要更改这部分:

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

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

      并将变量 mCurrentScale 添加到您的活动中,以记住当前规模,如下所示:

      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;
      

      ...

      【讨论】:

      • 另外我推荐 Luke Hutchison 的 MultiTouchController,它适用于 2.1 并支持复杂的手势,如拖动时缩放。
      • 感谢您的回复。这仅适用于第一次,当我们执行几个大比例更改时,我们会失去对图像的控制,并且它变得太小,然后很难放大。感谢您查看和回复此帖子。
      【解决方案3】:

      这解决了我的问题。图像放大/缩小到极限后,它就会停止进一步。它也很流畅,没有滞后。 0.7 和 2.0 是最小和最大缩放级别。

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

      【讨论】:

        猜你喜欢
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多