안녕하세요~

구글맵을 이용해서 어플을 만들고 있습니다.
구글 api에 북쪽이 실제 북쪽을 향하게 하는 기능은 포함되어 있지 않은 것 같아서
Canvas를 이용해서 돌리려고 하는데요.

인터넷에서 찾아보니 onDraw는 final로 바뀌어서 override 가 불가능하더군요.

FrameLayout에 MapView를 넣고
dispathchDraw()를 override 해서 canvas.rotate를 했는데요~

맵이 안돌아가요~~~~~~~~
어떻게 하면 되나요????

소스도 같이 올립니다.

package com.h;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;

import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.FrameLayout.LayoutParams;

public class rotaView extends MapActivity {
 private static final String TAG = "RotatedMapView";

 float[] mValues;
 myMap my;
 Frame linear;
    /** Called when the activity is first created. */

 
 
 public class Frame extends FrameLayout{

  public Frame(Context context) {
   super(context);
   // TODO Auto-generated constructor stub
  }
      protected void dispatchDraw(Canvas canvas) {


             if (mValues!=null) {
              canvas.save();
             
              Log.d("degree","a"+mValues[0]);
             
              canvas.rotate(mValues[0],canvas.getWidth()/2,canvas.getHeight()/2);
          //    canvas.rotate((float) (mValues[0] / 360 * 3.14));
            
              super.dispatchDraw(canvas);
              canvas.restore();


     linear.removeView(getCurrentFocus());
             setContentView(linear);                     
                  
             }
             super.dispatchDraw(canvas);
     }

 }
   
   public class myMap extends MapView{
       
     public myMap(Context context, String apiKey){
       super(context, apiKey);
       
         }
     
     
 /*      @Override
      
        protected void dispatchDraw(Canvas canvas) {


                  if (mValues!=null) {
                   canvas.save();
                   canvas.rotate(90,canvas.getWidth()/2,canvas.getHeight()/2);
               //    canvas.rotate((float) (mValues[0] / 360 * 3.14));
                   super.dispatchDraw(canvas);
                   canvas.restore();

                    
                                       
                       
                  }
                  super.dispatchDraw(canvas);
          }

*/
    }
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        SensorManager sManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        Sensor ori= sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        sManager.registerListener(sensorListen, ori,SensorManager.SENSOR_DELAY_NORMAL);
       
        linear = new Frame(getApplicationContext());
       
        my = new myMap(this, "0JVC2EBnGfZ1yO_EmY0ZzUgGvBfgEz3xa8bk4kw");
        linear.addView(my);
       
        setContentView(linear);
       
        }
       

 /////////
 
 
 SensorEventListener sensorListen = new SensorEventListener() {
  
  @Override
  public void onSensorChanged(SensorEvent event) {
   // TODO Auto-generated method stub
   mValues = event.values;
   Log.d("z", "a"+mValues[0]);
   
   linear.invalidate();
   
   
  }
  
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
   // TODO Auto-generated method stub
   
  }
 };
       
     

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }

 
}