2010-08-16 6 views
6

J'ai des objets que je dessine sur un Canevas dans le cadre d'un SurfaceView. Je veux être en mesure de faire pivoter ces programmes, par ex. myParticle.setRotation(90); Voici mon code (simplifié) pour dessiner la particule au moment:Rotation Bitmap sur 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

ce qui est l'image? bitmap? – Siten

Répondre

5

Il vous suffit d'appeler

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

+2

Et canvas.rotate (0) après! – fredley

+4

canvas.save() et canvas.restore() sont plus efficaces. – methodin

+12

mais il fait pivoter tous les objets sur la toile. Je veux en faire pivoter un seul. En fait, ils sont en train d'animer des images, donc ils sont appelés dans un fil. –

42

Pour moi, il semble plus propre à faire:

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 cette façon, la toile reste orientée comme auparavant, et vous pouvez faire plus de choses avec votre matrice comme la traduction, la mise à l'échelle, etc. et l'encapsulation de contenu de la matrice es le vrai sens de votre manipulation.

Édition: Eddie voulait savoir à quel point la rotation se produisait.

Modifier: AndrewOrobator voulait savoir comment définir les coords destination de toile

+3

Comment spécifier les valeurs X et Y pour la position avec cette méthode? – Eddie

+0

@Eddie: Qu'entendez-vous par «comment spécifiez-vous»? – Bondax

+0

Je pense qu'il veut dire la position dans laquelle le bitmap sera affiché sur la toile –