Rotar MapView en Android

Estoy escribiendo una aplicación para Android donde una de las características es que el mapa girará de acuerdo con la brújula (es decir, si el teléfono apunta al este, el mapa estará orientado de modo que el lado este del mapa esté en la parte superior). Las respuestas anteriores que he encontrado sugeridas sobre la escritura del método onDraw () en mapView, sin embargo, la API cambió el método a final por lo que no se puede sobrescribir. Como resultado he intentado sobrescribir eldispatchDraw() método como tal:

Nota:

-compass es un booleano que, si es verdadero, rota la vista

La orientación es una variable flotante que tiene los grados que la vista debe rotar.

protected void dispatchDraw(Canvas canvas) {
    canvas.save();
         if (compass) {
             final float w = this.getWidth();
             final float h = this.getHeight();

             final float scaleFactor = (float)(Math.sqrt(h * h + w * w) / Math.min(w, h));

             final float centerX = w / 2.0f;
             final float centerY = h / 2.0f;

             canvas.rotate(bearing, centerX, centerY);
             canvas.scale(scaleFactor, scaleFactor, centerX, centerY);

         }
         super.dispatchDraw(canvas);
         canvas.restore();
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta