2017-10-04 72 views
0

我有一個自定義視圖,我加載位圖圖像。然後我做一些操作,如放大,縮小,旋轉,拖動和改變位置等。在完成這些操作後,我想用手指在位圖上繪製。我爲此使用canvas.drawPath(mPath, mPaint)。如果我在屏幕上加載圖像並開始繪製,它完美的工作,但如果我改變圖像的位置或旋轉它或放大或縮小;我的路徑被繪製在不同於我所觸及的位置。我的問題是什麼可能是這個問題的原因,我該如何解決。如何在重新定位自定義視圖中的圖像並重新縮放圖像後在位圖圖像上使用路徑?

+1

放置您的一些代碼。因此它有助於理解 –

+0

可能使用FrameLayout並在縮放的圖像視圖的頂部具有繪圖視圖,因此繪圖不會被縮放比例扭曲。 – eduyayo

回答

0

我的問題解決了由this question答案拖動圖像和重新定位和縮放上下。

我已經把下面的代碼放在了onTouchEvent方法中。

float x = event.getX()/drawImage.getScaleX() - rect.left/drawImage.getScaleX(); 
float y = (event.getY())/drawImage.getScaleY() - rect.top/drawImage.getScaleY(); 
float p = drawImage.getCenterX()/drawImage.getScaleX() - rect.left/drawImage.getScaleX(); 
float q = drawImage.getCenterY()/drawImage.getScaleY() - rect.top/drawImage.getScaleY(); 
float x1 = (float) ((x - p) * Math.cos(drawImage.getAngle()) + (y - q) * Math.sin(drawImage.getAngle()) + p); 
float y1 = (float) ((y - q) * Math.cos(drawImage.getAngle()) - (x - p) * Math.sin(drawImage.getAngle()) + q); 

這裏drawImage是我自定義的drawable。 x1,y1是我正在搜索的實際座標。

0

在更改所顯示的圖像之前,請保存畫布的位置。 之後,恢復原來的位置。 事情是這樣的:

public void onDraw(Canvas c) { 
    c.save(); 
    //Do your "image manipulation" logic 
    c.restore(); 
    c.drawPath(mPath, mPaint); 
}