안녕하세요~
구글맵을 이용해서 어플을 만들고 있습니다.
구글 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;
}
}