2012-01-13 18 views
5

Tengo un problema para acercar el lienzo. He hecho una vista personalizada en la que estoy dibujando diagramas de relaciones ahora cuando alejé el lienzo hacia la posición (0,0). He visto diferentes hilos y preguntas pero no he podido encontrar la respuesta adecuada.Lienzo Zoom va al punto (0,0)

Lo que estoy haciendo en el método onDraw es.

canvas.scale(mScaleFactor, mScaleFactor); 

También he visto el (y, px, x, py) Método canvas.scale pero yo no sé cómo obtener los puntos de giro de x e y.

public boolean onScale(ScaleGestureDetector detector) { 

mScaleFactor *= detector.getScaleFactor(); 
// Don't let the object get too small or too large. 
mScaleFactor = Math.max(0.4f, Math.min(mScaleFactor, 5.0f)); 
if(mScaleFactor>=1) 
    mScaleFactor=1f; 

invalidate(); 
return true; 

}

+0

mensaje más código. Es difícil ayudarte sin ver todas las piezas del rompecabezas. –

Respuesta

9

Los puntos de giro son básicamente el punto de que el lienzo se transformarán en torno, por lo que la ampliación de un pivote de 0,0 hace que se contraiga hacia dicho punto. utilizando el siguiente método se puede cambiar el punto de giro a donde quiera que:

canvas.scale(x, y, px, py); 

ahora por el nuevo material: Si desea que su lienzo para escalar hacia su centro, que sólo tendrá que saber la punto en el medio de su lienzo:

float cX = canvas.getWidth()/2.0f; //Width/2 gives the horizontal centre 
float cY = canvas.getHeight()/2.0f; //Height/2 gives the vertical centre 

Y entonces se puede escalar usando esas coordenadas:

canvas.scale(x, y, cX, cY); 
+0

Esto hace que mi imagen esté en el centro de la pantalla. – sajjoo

+0

¿Dónde quieres que se centre la escala? – Jave

+0

Quiero escalar el área entre mis dedos y se debe escalar en el mismo punto. como google map hace. – sajjoo

Cuestiones relacionadas