2011-02-03 81 views
8

如何從Canvas獲取當前翻譯位置?我試圖繪製我的座標是相對(彼此)和絕對(對畫布)混合的東西。如何在Canvas中查找當前翻譯位置?

可以說我想要做的

canvas.translate(x1, y1); 
canvas.drawSomething(0, 0); // will show up at (x1, y1), all good 
// now i want to draw a point at x2,y2 
canvas.translate(x2, y2); 
canvas.drawSomething(0, 0); // will show up at (x1+x2, y1+y2) 
// i could do 
canvas.drawSomething(-x1, -y1); 
// but i don't always know those coords 

這工作,但太髒:

private static Point getCurrentTranslate(Canvas canvas) { 
    float [] pos = new float [2]; 
    canvas.getMatrix().mapPoints(pos); 
    return new Point((int)pos[0], (int)pos[1]); 
} 
... 
Point p = getCurrentTranslate(canvas); 
canvas.drawSomething(-p.x, -p.y); 

畫布有getMatrix方法,它有一個setTranslate,但沒有getTranslate。我不想使用canvas.save()canvas.restore(),因爲我畫的東西的方式有點棘手(也許是凌亂的......)

有沒有更簡潔的方式來獲得這些當前座標?

回答

0

您需要先重置變換矩陣。我不是一個android開發人員,看着android canvas docs,沒有重置矩陣,但有一個setMatrix(android.graphics.Matrix)。它說,如果給定矩陣爲空,它會將當前矩陣設置爲單位矩陣,這正是您想要的。所以我覺得你可以重置您的位置(和規模和歪斜):

canvas.setMatrix(null); 

這也有可能通過getMatrix來獲得當前的翻譯。有一個mapVectors()方法可用於以查看點[0,0]將被映射到的位置,這將是您的翻譯。但在你的情況下,我認爲重置矩陣是最好的。