gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:55 31 4
gpt4 key购买 nike

如何从 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);

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

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

最佳答案

您需要先重置转换矩阵。我不是 android 开发人员,正在查看 android canvas docs ,没有重置矩阵,但是有setMatrix(android.graphics.Matrix)。它说如果给定的矩阵为空,它将当前矩阵设置为单位矩阵,这就是你想要的。所以我认为您可以通过以下方式重置您的位置(以及缩放和倾斜):

canvas.setMatrix(null);

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

关于android - 如何在 Canvas 中找到当前的翻译位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884960/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com