2010-08-16 32 views
6

Tengo algunos objetos que dibujo en un lienzo como parte de un SurfaceView. Quiero poder rotar estos programáticamente, p. myParticle.setRotation(90); Aquí está mi código (simplificado) que llame la partícula en la actualidadGirar mapa de bits en Android Canvas

public class Particle { 

    public void draw(Canvas canvas){ 
    image.setBounds((int)(xPos), (int)(yPos), (int)(xPos+radius), (int)(yPos+radius)); 
    image.draw(canvas); 
    } 

} 
+0

lo que es la imagen? mapa de bits? – Siten

Respuesta

5

Sólo hay que llamar

canvas.rotate(90) :) // 90 is degree.

+2

Y canvas.rotate (0) después! – fredley

+4

canvas.save() y canvas.restore() es más eficiente. – methodin

+12

pero gira todos los objetos en el lienzo. Quiero rotar solo uno. en realidad están animando imágenes, por lo que se les llama en un hilo. –

42

Me parece más limpia de hacer esto:

Matrix rotator = new Matrix(); 

// rotate around (0,0) 
rotator.postRotate(90); 

// or, rotate around x,y 
// NOTE: coords in bitmap-space! 
int xRotate = ... 
int yRotate = ... 
rotator.postRotate(90, xRotate, yRotate); 

// to set the position in canvas where the bitmap should be drawn to; 
// NOTE: coords in canvas-space! 
int xTranslate = ... 
int yTranslate = ... 
rotator.postTranslate(xTranslate, yTranslate); 

canvas.drawBitmap(bitmap, rotator, paint); 

De esta manera, el lienzo se mantiene dirigido como antes, y puede hacer más cosas con su matriz como traducir, escalar, etc. y encapsular el contenido de la matriz es el verdadero significado de tu manipulación.

Editar: Eddie quería saber en qué punto ocurre la rotación.

Editar: AndrewOrobator quería saber cómo establecer las coordenadas de destino de lona

+3

¿Cómo se especifican los valores X e Y para la posición con este método? – Eddie

+0

@ Eddie: ¿Qué quiere decir con "cómo se especifica"? – Bondax

+0

Creo que se refiere a la posición en la que se mostrará el mapa de bits en el lienzo –

Cuestiones relacionadas