如何从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 :(得分:0)
您需要先重置转换矩阵。我不是一个Android开发人员,看着android canvas docs,没有重置矩阵,但有一个setMatrix(android.graphics.Matrix)。它表示如果给定的矩阵为空,它会将当前矩阵设置为单位矩阵,这就是你想要的。所以我认为您可以使用以下方法重置您的位置(以及缩放和倾斜)
canvas.setMatrix(null);
也可以通过getMatrix获取当前的翻译。您可以使用mapVectors()方法matrices来查看点[0,0]的映射位置,这将是您的翻译。但在你的情况下,我认为重置矩阵是最好的。