Android 如何在画布中找到当前的平移位置?

Android 如何在画布中找到当前的平移位置?,android,canvas,Android,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

如何从画布获取当前平移位置?我试图画的东西,我的坐标是一个相对(相互)和绝对(画布)的混合体

让我们说我想做什么

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()
,因为我画东西的方式有点复杂(可能很凌乱…)


有没有更干净的方法来获取这些当前坐标?

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

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

canvas.setMatrix(null);