代码很简单:
/**
*
* @date Aug 29, 2012
* @fileName CompassView.java
*
*/
public class CompassView extends View implements SensorEventListener {
private static final String TAG="CompassView";
private Paint mPaint = new Paint();
private Path mPath = new Path();
private SensorManager sm;
private float[] mValues;
private MapView mapView;
/**
* @param context
*/
public CompassView(Context context,MapView mapView) {
super(context);
this.mapView=mapView;
sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mPath.moveTo(0, -12);
mPath.lineTo(-8, 15);
mPath.lineTo(0, 12);
mPath.lineTo(8, 15);
mPath.close();
}
public void register(){
sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
}
public void unregister(){
sm.unregisterListener(this);
}
public void addLayout(RelativeLayout layout){
LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layout.addView(this);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = mPaint;
canvas.drawColor(Color.TRANSPARENT);
paint.setAntiAlias(true);
paint.setColor(Color.TRANSPARENT);
paint.setStyle(Paint.Style.FILL);
if(MapManager.myGeoPoint!=null){
paint.setColor(Color.BLUE);
Projection projection = mapView.getProjection();
Point point = projection.toPixels(MapManager.myGeoPoint, null);
canvas.translate(point.x, point.y-10);
}
if (mValues != null) {
if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE) {
canvas.rotate(-90);
}
if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
}
canvas.rotate(-mValues[0]);
}
canvas.drawPath(mPath, mPaint);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
@Override
public void onSensorChanged(SensorEvent event) {
mValues=event.values;
invalidate();
}
}