2011-02-03 25 views
8

¿Cómo obtengo la posición de traducción actual de un lienzo? Estoy tratando de dibujar cosas donde mis coordenadas son una mezcla de relativa (entre sí) y absoluta (a lienzo).¿Cómo encontrar la posición de traducción actual en Canvas?

digamos que yo quiero hacer

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 

Esto funciona pero está sucia:

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); 

La lona tiene un método getMatrix, tiene una setTranslate pero sin getTranslate. No quiero usar canvas.save() y canvas.restore() porque la forma en que estoy dibujando cosas es un poco complicado (y probablemente desordenado ...)

¿Hay alguna manera más clara de obtener estas coordenadas actuales?

Respuesta

0

Primero debe restablecer la matriz de transformación. No soy un desarrollador de Android, mirando el android canvas docs, no hay una matriz de reinicio, pero hay un setMatrix (android.graphics.Matrix). Dice que si la matriz dada es nula, establecerá la matriz actual en la matriz de identidad, que es lo que quieres. Así que creo que se puede restablecer su posición (y la escala y sesgar) con:

canvas.setMatrix(null); 

También sería posible conseguir la traducción corriente a través getMatrix. Hay un método mapVectors() que puede usar para matrices para ver dónde se mapeará el punto [0,0], esta sería su traducción. Pero en tu caso, creo que reiniciar la matriz es lo mejor.

Cuestiones relacionadas