Android: rotação da imagem ao redor do centro

Estou tentando girar uma imagem ao redor do centro. Isso geralmente funciona usando RotateAnimation, mas eu quero tê-lo um pouco mais rápido. Agora estou usando o padrão SurfaceView com uma linha de desenho separada.

Este é o código, que desenha o bitmap corretamente (dependendo do "cabeçalho" externo)

cabeçalho = ângulo em graus, bitmap = o bitmap, w = largura do bitmap, h = altura do bitmap.

    Matrix m = new Matrix();
    m.preRotate(heading, w/2, h/2);
    m.setTranslate(50,50);

    canvas.drawBitmap(bitmap, m, null);

Desvantagem: a imagem é um círculo e o código acima produz efeitos de aliasing visíveis ...

O código abaixo também está girando a imagem, mas enquanto gira (digamos de 0 a 45 graus no sentido horário), o centro da nova imagem se move para baixo / para a direita. Suponho que o efeito excêntrico se deva à largura / altura ampliada da nova imagem? No entanto, esse código não produz alias, se filter = true estiver definido. Existe uma maneira de usar o código nº 1, mas ter um tipo de anti-aliasing ou usar o código nº 2, mas livrar-se do movimento central?

    Matrix m = new Matrix();
    m.preRotate(heading, w/2, h/2);
    m.setTranslate(50,50);

    Bitmap rbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
    canvas.drawBitmap(rbmp, 50, 50, null);

UPDATE: Como resultado da discussão neste tópico, a versão correta do código # 2 (anti-aliasinge rotação correta) ficaria assim (deslocamento de 50,50 omitido):

        Matrix m = new Matrix();

        m.setRotate(heading, w/2, h/2);
        Bitmap rbpm = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
        canvas.drawBitmap(rbpm, (w - rbpm.getWidth())/2, (h - rbpm.getHeight())/2, null);

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion