どこかで見つけた既製のソリューションを使用してビットマップを回転させようとしています。コードは以下のとおりです。
public void onDraw(Canvas canvas) {
float x = ship.Position.left;
float y = ship.Position.top;
canvas.drawBitmap(ship.ship, x,y,null);
invalidate();
}
ただし、これを行うと、X 軸と Y 軸の方向が変わります。Y を大きくすると、画像は画面の下部ではなく上部に移動します。X を 90 度回転させると、同じことが起こります。
Y軸とX軸の方向を変えずに回転させる必要があります。
回転しても、Y を大きくするとビットマップを下に移動し、X を大きくすると右に移動します。
public void update()
{
if(!moving)
{
fall();
}
else //moving
{
move();
faceDirection();
}
Position.top += Speed;
}
private void move() {
if(Speed < MAXSPEED)
Speed -= 0.5f;
}
private void fall() {
if(Speed > MAXSPEED*-1)
Speed += 0.2f;
}
private void faceDirection() {
double OldDiretion = Direction;
Direction = DirectionHelper.FaceObject(Position, ClickedDiretion);
if (Direction != OldDiretion)
{
Matrix matrix = new Matrix();
matrix.postRotate((float)Direction);
ship = Bitmap.createBitmap(ship, 0, 0, ship.getWidth(),ship.getHeight(), matrix, false);
}
上記のコードを試してみましたが、まだ Y 方向が変更されています。画面の下部ではなく、ビットマップの下部になります。
プロジェクトは次のとおりです: https://docs.google.com/file/d/0B8V9oTk0eiOKOUZJMWtsSmUtV3M/edit?usp=sharing