如何在Canvas中找到当前的翻译位置?

时间:2011-02-03 10:27:20

标签: android 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(),因为我绘制它的方式有点棘手(可能很麻烦......)

有更简洁的方法来获取这些当前坐标吗?

1 个答案:

答案 0 :(得分:0)

您需要先重置转换矩阵。我不是一个Android开发人员,看着android canvas docs,没有重置矩阵,但有一个setMatrix(android.graphics.Matrix)。它表示如果给定的矩阵为空,它会将当前矩阵设置为单位矩阵,这就是你想要的。所以我认为您可以使用以下方法重置您的位置(以及缩放和倾斜)

canvas.setMatrix(null);

也可以通过getMatrix获取当前的翻译。您可以使用mapVectors()方法matrices来查看点[0,0]的映射位置,这将是您的翻译。但在你的情况下,我认为重置矩阵是最好的。