2010-10-11 13 views
5

Mi objetivo es voltear una imagen horizontalmente y luego dibujarla sobre un lienzo. Actualmente estoy usando canvas.scale (-1,1) que funciona de manera efectiva y dibuja la imagen horizontalmente, sin embargo, también se atornilla con los valores del eje x donde antes de la escala la posición x sería 150 y después tendría que cambiar a -150 para renderizar en el mismo lugar.Android canvas.scale (-1,1)

Mi pregunta es, ¿cómo puedo hacer para que el valor x sea 150 en ambos casos sin tener que ajustar la posición x después de la escala? ¿Hay una manera más efectiva de hacer esto sin tener un impacto en el rendimiento?

Respuesta

1

He arreglado esto aplicando la transformación al mapa de bits antes de tener que utilizar de esta manera:

public void applyMatrix(Matrix matrix) { 
    mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, 
     mBitmap.getWidth(), mBitmap.getHeight(), matrix, true); 
} 
... 
Matrix matrix = new Matrix(); 
matrix.preScale(-1, 1); 
mSprite.applyMatrix(matrix); 
0

¿Intentaste repetir el canvas.scale(-1, 1)? Se eliminará efectivamente la transformación, ya que dos negativos hacen un positivo.

8

Sé que esta pregunta es viejo, pero tropezó con el mismo problema. En mi situación, tuve que voltear el lienzo al dibujar en una clase que extiende un ImageButton. Afortunadamente, la solución para este caso específico fue más elegante de lo que pensé. Simplemente anule el método onDraw(Canvas) de la siguiente manera:

@Override 
protected void onDraw(final Canvas canvas) { 

    // Scale the canvas, offset by its center. 
    canvas.scale(-1f, 1f, 
     super.getWidth() * 0.5f, super.getHeight() * 0.5f); 

    // Draw the button! 
    super.onDraw(canvas); 
} 
Cuestiones relacionadas