2012-08-07 12 views
7

Quiero escalar un lienzo con un mapa de bits dibujado sobre él. Puedo escalar el lienzo pero el mapa de bits dibujado en él se mueve hacia la esquina superior izquierda o hacia la derecha.Scaling canvas and keeping center

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.translate(mPosX, mPosY); 
    canvas.scale(mScaleFactor, mScaleFactor); 

    //draw bitmap 
} 

Durante los últimos días probé muchos enfoques diferentes desde la manipulación de las coordenadas de traducción hasta los puntos de pivote para escalar. Pero nada funcionó para mí. Estoy bastante seguro de que debe haber una solución fácil para mi problema.

Gracias de antemano

+0

¿Cómo exactamente quiere que se escala el mapa de bits? ¿Qué significa esto ?: "pero el mapa de bits dibujado sobre él se mueve hacia la esquina superior izquierda, o hacia la derecha, hacia abajo". – you786

+0

Digamos que tengo un círculo rojo en el centro de la pantalla. Si hago un acercamiento, quiero tener un círculo rojo más grande en el centro de la pantalla. Ahora mismo obtengo un círculo rojo más grande que está en la esquina inferior derecha de la pantalla –

Respuesta

13

Al igual que usted ha mencionado, el punto de pivote es la forma correcta de hacer esto:

canvas.scale(2,2, redCircle.x, redCircle.y); 

va a funcionar. No hay necesidad de traducción adicional.

+0

El círculo rojo era solo un ejemplo. De hecho, hay muchos mapas de bits diferentes dibujados en el lienzo. Quiero ampliar lo que haya en el centro de la pantalla. –

+0

Entonces su punto de pivote debe ser el centro de su pantalla. Si ya lo ha intentado, debe haber estado utilizando valores incorrectos para el centroX y el centroY. – you786

+0

Bien. Ahora puedo acercarme al centro de la pantalla. Pero ahora el desplazamiento en el lienzo es realmente lento 'canvas.scale (mScaleFactor, mScaleFactor, getWidth()/2, getHeight()/2); \t \t \t canvas.translate (mPosX, mPosY); ' –