2012-02-01 187 views
2

我在使用Google tutorial來實現畫布的縮放功能。我正在畫布上畫幾件物品,我可以通過Canvas.translate(dx,dy)以及物品移動它。爲了讓我確定這些項目是否在畫布平移之後被觸摸,我採用用於Canvas.translate(dx,dy)的畫布偏移量並減去觸摸位置。一旦我將縮放比例引入圖片,它會變得有點棘手。如果我使用Canvas.scale(sx,sy)並做(touchX-offsetX)/scaleFactor,則標尺完成後觸摸位置的平移。但是,如果包含一個樞軸位置Canvas.scale(sx,sy,px,py)上面那些代碼不起作用。作爲我的觸摸翻譯的一部分,我如何着手考慮樞軸位置?我通過下列方式設置了我的支點位置,畫布可繪製和居中縮放

public boolean onScaleBegin(ScaleGestureDetector detector) { 
    mScaleX = detector.getFocusX(); 
    mScaleY = detector.getFocusY(); 
    return true; 
} 

任何幫助將不勝感激。

回答

0

簡單的解決方案

public class ScalableImageView extends View { 
    Matrix drawMatrix = new Matrix(); 
    ScaleGestureDetector detector; 
    public ScalableImageView(Context context, AttributeSet attrs) { 
     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 

      drawMatrix.postScale(detector.getScaleFactor(), detector.getScaleFactor(), detector.getFocusX(), detector.getFocusY()); 
      invalidate(); 
      return true; 
     } 

     @Override 
     public boolean onScaleBegin(ScaleGestureDetector detector) { 
      return drawMatrix != null; 
     } 

     @Override 
     public void onScaleEnd(ScaleGestureDetector detector) { 

     } 
    } 

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

     canvas.save(); 
     canvas.concat(drawMatrix); 
     // ... draw here 
     // for example drawable.draw() 
     canvas.restore(); 
    } 

} 

}