Android: rotación de la imagen alrededor del centro

Estoy tratando de rotar una imagen alrededor del centro. Esto funciona generalmente usando RotateAnimation, pero quiero tenerlo un poco más rápido. Ahora estoy usando el patrón SurfaceView con un hilo de dibujo separado.

Este es el código, que dibuja el mapa de bits correctamente (dependiendo del "encabezado" externo)

heading = ángulo en grados, mapa de bits = el mapa de bits, w = ancho del mapa de bits, h = altura del mapa de bits.

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

    canvas.drawBitmap(bitmap, m, null);

Drawback: la imagen es un círculo y el código anterior produce efectos de aliasing visibles ...

El siguiente código también gira la imagen, pero mientras gira (digamos de 0 a 45 grados en el sentido de las agujas del reloj) el centro de la nueva imagen se mueve hacia abajo / derecha. Supongo que el efecto excéntrico se debe al ancho / alto ampliado de la nueva imagen. Sin embargo, este código no produce alias, si se establece filter = true. ¿Hay alguna forma de usar el código n. ° 1 pero tener una especie de suavizado o usar el código n. ° 2 pero deshacerse del movimiento 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 de la discusión en este hilo, la versión correcta del código # 2 (anti-aliasing rotación correcta) se vería así (se omite el desplazamiento de 50,50):

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

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta