@Image muda de tamanho à medida que é girada. Como eu paro isto

Estou fazendo um jogo para Android e preciso girar uma imagem. Quando eu giro, obviamente as dimensões mudam. Por exemplo, quando é girado 45 graus (é quadrado, mas eu gostaria que isso funcionasse em qualquer retângulo, por isso é uma solução mais geral), sua largura e altura se tornam o comprimento da diagonal, que é maior que o original. Após alguma álgebra, você pode descobrir que o fator de escala é sqrt (2). Mas a única maneira que eu sei de rotacionar um bitmap é com uma matriz. Ex

matrix.postRotate(degrees);
rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);

Usando esse método, o tamanho do bitmap permanece constante, para que a imagem girada no conteúdo da imagem seja reduzida. O que causa o meu problema.

O que eu tenho agora deve funcionar, mas quando executado não. Provavelmente porque é excessivamente complexo, nunca menos, aqui está:

     float totalRo,tated = 0;

public void rotate(float degrees){
    if(mBitmap != null){
        float increment = (float)((mBitmap.getWidth()/45.0)*(Math.sqrt(2)-1));
        totalRotated += degrees;
        totalRotated -= (float)((int)totalRotated/360)*360;
        matrix.reset();
        matrix.setRotate(totalRotated);
        rotated = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
        rotated = Bitmap.createScaledBitmap(rotated, (int)(mBitmap.getWidth()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), (int)(mBitmap.getHeight()+(((Math.abs(Math.abs(((int)totalRotated%90)-45)-45)))*increment)), true);
    }
}

Usando oLog.d function Consegui determinar que as dimensões definidas na última instrução são o que eu espero que sejam, mas a imagem não muda de tamanho. Como isso nem funciona, eu preciso de uma maneira melhor de fazer isso ou de corrigir meu método. Além disso, meu método funciona apenas para quadrados. Então, como posso fazer isso?

EDIT: Meu método funciona, eu simplesmente não liguei parasetBounds() Essa não pode ser a única maneira de fazê-lo, é tão ineficient

questionAnswers(1)

yourAnswerToTheQuestion