2010-08-16 15 views
6

Ho alcuni oggetti che disegno su una tela come parte di SurfaceView. Voglio potere ruotare questi programmaticamente, ad es. myParticle.setRotation(90); Ecco il mio codice (semplificato) per disegnare il particelle in questo momento:Ruota bitmap su tela Android

public class Particle { 

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

} 
+0

ciò che è immagine? bitmap? – Siten

risposta

5

Basta chiamare

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

+2

E canvas.rotate (0) in seguito! – fredley

+4

canvas.save() e canvas.restore() è più efficiente. – methodin

+12

ma ruota tutti gli oggetti sulla tela. Voglio ruotare solo uno. in realtà stanno animando le immagini, quindi vengono chiamati in una discussione. –

42

A me sembra più pulito per fare questo:

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

In questo modo la tela rimane orientata come prima, e puoi fare più cose con la tua matrice come la traslazione, il ridimensionamento ecc. E il contenuto della matrice encapsulat è il vero significato della tua manipolazione.

Modifica: Eddie voleva sapere in che punto avviene la rotazione.

Edit: AndrewOrobator voleva sapere come impostare le coordinate di destinazione tela

+3

Come si specificano i valori X e Y per la posizione con questo metodo? – Eddie

+0

@Eddie: cosa intendi con "come si specifica"? – Bondax

+0

Penso che indichi la posizione in cui la bitmap verrà visualizzata sulla tela –