2012-10-29 44 views
2

我正在制作一个应用程序,其中有一个小玩具,左侧有一些礼服(ListView),您可以选择礼服。从该列表视图中,您只需选择一件连衣裙,连衣裙就会自动添加到视图中,现在我可以轻松拖动它,但无法放大/缩小。放大/缩小AbsoluteLayout上的图像Android

下面是我的代码:

 mKittyBGLayer.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      for (ImageView img1 : mArrayList) { 
       if (kittyStatus == img1.getId()) { 
        mKittyDress = img1; 
        break; 
       } 
      } 
      if (mKittyDress != null) { 
       LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, (int) event.getX() 
         - mKittyDress.getWidth()/2, (int) event.getY() - mKittyDress.getHeight()/2); 
       mKittyDress.setLayoutParams(lp); 

       // 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; 
        break; 

       case MotionEvent.ACTION_POINTER_DOWN: 
        oldDist = spacing(event); 
        if (oldDist > 10f) { 
         savedMatrix.set(matrix); 
         midPoint(mid, event); 
         mode = ZOOM; 
        } 
        break; 

       case MotionEvent.ACTION_UP: 
       case MotionEvent.ACTION_POINTER_UP: 
        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); 
         if (newDist > 10f) { 
          matrix.set(savedMatrix); 
          float scale = newDist/oldDist; 
          matrix.postScale(scale, scale, mid.x, mid.y); 
         } 
        } 
        break; 
       } 

       mKittyDress.setImageMatrix(matrix); 
       return true; // indicate event was handled 
      } 
      return true; 
     } 
    }); 


     /** Determine the space between the first two fingers */ 
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); 
} 

/** Calculate the mid point of the first two 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); 
} 
+1

您不应该再使用'AbsoluteLayout'。它在API 3中被标记为弃用,这更多的是10个API迭代前的! – WarrenFaith

回答

0

什么,我居然在这样的情况下完成的,是用一个WebView来显示图像。这给了用户缩放/滚动手势和惯性,它们与他们习惯的精确匹配。

+0

粘滞不可能在我的应用程序中不可能我只能在一个视图中添加多个图像,而且我也可以拖动,在webview中这一切都是可能的,我认为它不是! –

+0

我可能有点困惑(也许你可以添加更多的细节)确切地说你的应用程序看起来如何。如果您有多个图像,也许您仍然可以使用WebView - 将其发送到您已生成的页面,并将所有这些图像彼此相邻显示。无论你想在该WebView中使用,你都可以显示它们。除非,你的图像在这一点上并不实际保存为文件? –