2012-09-07 146 views
1

正在开发一个应用程序,我在其中粘贴图像,在画布上进行绘画和绘画。此应用程序还可以放大/缩小画布或将其拖到不同的位置。我的问题是:缩放或拖动画布后无法获得正确的画布坐标。我想提请画布进行缩放或拖动,但无法检索在那里我已经碰到合适的位置后,手指画...使用缩放和darg绘制路径

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    scaleListener.onTouchEvent(event); 

    synchronized(thread.getSurfaceHolder()){ 

     switch (event.getAction() & MotionEvent.ACTION_MASK){ 

      case MotionEvent.ACTION_DOWN : 
       // Remember our initial down event location. 
       savedMatrix.set(m_matrix); 
       start.set(event.getX() , event.getY()); 
       mode = DRAG;     
      break; 

      case MotionEvent.ACTION_POINTER_DOWN : 

       oldDist = spacing(event); 
       if (oldDist > 10f) { 

        savedMatrix.set(m_matrix); 
        m_matrix.getValues(matrixValues); 
        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 && isDragAllowd){ 
         m_matrix.set(savedMatrix); 
         rebound(event.getX() , event.getY()); 
       } 
       else if(mode==ZOOM){ 

        float newDist = spacing(event); 
        if (newDist > 10f){ 

          m_matrix.set(savedMatrix); 

          float scale = newDist/oldDist; 
          m_matrix.getValues(matrixValues); 
          float currentScale = matrixValues[Matrix.MSCALE_X]; 

          // limit zoom 
          if (scale * currentScale > maxZoom){ 
            scale = maxZoom/currentScale; 
            //scale = maxZoom; 
          } 
          else if (scale * currentScale < minZoom){ 
            scale = minZoom/currentScale; 
            //scale = minZoom; 
          } 

          m_matrix.postScale(scale, scale, mid.x, mid.y); 
          m_matrix.getValues(matrixValues); 

        } 

      } 
     break; 

    } 

    return true; //done with this event so consume it 


    }  

} 

@Override 
protected void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 

      canvas.drawColor(Color.WHITE); 
     canvas.drawBitmap(currentBitmap, m_matrix, null); 
     c2.drawColor(Color.BLACK); 
     commandManager.executeAll(c2); // Drawing all the Paints on Canvas c2 
     // Overlay bitmap it's a transparent layour 
      canvas.drawBitmap(overlayBitmap, 0, 0, pTouch); 

}

当用户放大位图,他是不是能绘制缩放后,绘制不会发生在适当的地方。

+0

请帮我解决上述问题。 – strike

+0

嗨打击,你可以分享缩放图像和绘图的代码。 –

回答

3

使用以下公式转换点后,用户在缩放或滚动后将不会面临任何难度绘画。

float f1 = ((motionEvent.getX() - m_transformedPoints[0])/(m_transformedPoints[2] - m_transformedPoints[0]))*currentBitmapWidth; 
    float f2 = ((motionEvent.getY() - m_transformedPoints[1])/(m_transformedPoints[3] - m_transformedPoints[1]))*currentBitmapHeight; 

    //calculate the transformed view in onDraw Method 
    this.m_transformedPoints[0] = 0.0F; 
    this.m_transformedPoints[1] = 0.0F; 
    this.m_transformedPoints[2] = currentBitmapWidth; 
    this.m_transformedPoints[3] = currentBitmapHeight; 
    this.m_matrix.mapPoints(this.m_transformedPoints); 
+0

优秀的解决方案!谢谢!!! –

+0

什么是m_transformedPoints? – MohsinSyd