Как найти текущую позицию перевода в Canvas? - PullRequest
8 голосов
/ 03 февраля 2011

Как мне получить текущую позицию перевода из 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 голосов
/ 04 февраля 2012

Сначала необходимо сбросить матрицу преобразования.Я не разработчик Android, глядя на документы для Android Canvas , нет матрицы сброса, но есть setMatrix (android.graphics.Matrix).Он говорит, что если заданная матрица равна нулю, он установит текущую матрицу в единичную матрицу, что вам и нужно.Поэтому я думаю, что вы можете сбросить свою позицию (и масштабировать и наклонить) с помощью:

canvas.setMatrix(null);

Также было бы возможно получить текущий перевод через getMatrix.Существует метод mapVectors (), который вы можете использовать для matrices , чтобы увидеть, где будет отображаться точка [0,0], это будет ваш перевод.Но в вашем случае я думаю, что лучше всего сбросить матрицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...