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

kri*_*nlm 8 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
Run Code Online (Sandbox Code Playgroud)

这有效但很脏:

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);
Run Code Online (Sandbox Code Playgroud)

画布有一个getMatrix方法,它有一个setTranslate但没有getTranslate.我不想使用canvas.save(),canvas.restore()因为我画画的方式有点棘手(可能很乱......)

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

cra*_*joe 1

您需要首先重置变换矩阵。我不是android开发人员,查看android canvas文档,没有重置矩阵,但有一个setMatrix(android.graphics.Matrix)。它表示如果给定的矩阵为空,它将把当前矩阵设置为单位矩阵,这就是你想要的。所以我认为你可以通过以下方式重置你的位置(以及比例和倾斜):

canvas.setMatrix(null);
Run Code Online (Sandbox Code Playgroud)

还可以通过 getMatrix 获取当前翻译。有一个 mapVectors() 方法,您可以用于矩阵来查看点 [0,0] 将映射到的位置,这将是您的翻译。但就你而言,我认为重置矩阵是最好的。