开发者

Rotate Bitmap on Android Canvas

开发者 https://www.devze.com 2023-01-12 07:04 出处:网络
I have some objects which I draw onto a Canvas as part of a SurfaceView. I want to be able to开发者_如何学运维 rotate these programmatically, e.g. myParticle.setRotation(90); Here\'s my (simplified) c

I have some objects which I draw onto a Canvas as part of a SurfaceView. I want to be able to开发者_如何学运维 rotate these programmatically, e.g. myParticle.setRotation(90); Here's my (simplified) code to draw the Particle at the moment:

public class Particle {

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

}


To me it seems cleaner to do this:

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

This way the canvas stays directed as before, and you can do more stuff with your matrix like translating, scaling etc. and the matrix's content encapsulates the real meaning of your manipulation.

Edit: Eddie wanted to know around which point the rotation happens.

Edit: AndrewOrobator wanted to know how to set the canvas destination coords


You just have to call

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

0

精彩评论

暂无评论...
验证码 换一张
取 消