2011-10-26 40 views
1

我想缩放后绘制圆形,它不是绘制在正确的位置。无法缩放它工作正常。缩放后我们是否需要考虑任何因素?有些东西像比例因子。 圆的半径也在增加。 即使变焦后也需要正确绘制。放大后的坐标android

 public boolean onTouch(View v, MotionEvent rawEvent) { 
     WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent); 
      ImageView view = (ImageView) v; 
     view.setScaleType(ImageView.ScaleType.MATRIX); 

      if (isZoomRequired == false) //draw circle when zoom is off. 
      { 
      x = (int) rawEvent.getX(); 
       y = (int) rawEvent.getY(); 
       r = SettingsActivity.brushsize; 

       pcanvas.drawCircle(x, y, r, mPaint); 
       layers[1] = new BitmapDrawable(bitmap); 
       LayerDrawable layerDrawable = new LayerDrawable(layers); 
      view.setImageDrawable(layerDrawable); 

      } 
      else //zoom when zoom is on or button selected      
      { 
      // 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: 
      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); 
       scale = newDist/oldDist; 
       matrix.postScale(scale, scale, mid.x, mid.y); 
       } 
      } 
      break; 
     } 


     view.setImageMatrix(matrix); 

     } 
    } 

如何计算在android中放大后的x,y坐标?也是缩放后的圆的半径。 任何帮助,将不胜感激。

回答

0

从你的代码中我不清楚你在做什么。但是你完全可以控制你画圆的方式。您可以根据给定的缩放级别缩放圆的半径,然后使用新的半径重新绘制圆或根据缩放级别缩放画布的矩阵。

+0

我已经更新了我的问题。我正在尝试缩放后绘制一个圆。但缩放后,我无法在正确的点绘制。是否有任何公式来计算使用缩放级别缩放后的x,y坐标?无法缩放时,我可以在正确的点绘制。缩放后,我不会在正确的点绘制。请让我知道如何计算缩放后的x,y坐标以及圆的半径。 – pavan

+0

现在我使用下面的行pcanvas.setMatrix(matrix)将矩阵设置为canvas。 。但有一些改进但仍存在问题。 – pavan

+0

嗨帕文你找到解决方案this.pls发布解决方案。谢谢 –

0

如果使用ScaleGestureDetector.SimpleOnScaleGestureListener类,你可以做这样的事情:

@Override 
public boolean onScaleBegin(ScaleGestureDetector detector){ 
    //the focal point before taking into account the zoom/translations/etc 
    float startX = detector.getFocusX(); 
    float startY = detector.getFocusY(); 

    initialPoints = new float[]{startX, startY}; 
     if(transformMatrix.invert(inverseTransformMatrix)) 
      inverseTransformMatrix.mapPoints(initialPoints); 
     //initialPoints now contain the correct points based on the current zoom 
}