googlemap中添加指南针图标

代码很简单:
/**
 * 
 * @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();
	}
	
}

猜你喜欢

转载自wx1985113.iteye.com/blog/1667528
今日推荐