您的位置:首页 > 其它

andriod map开发5 绘制当前位置

2012-05-31 14:41 197 查看
在地图上添加图层的时候,用了ItemizedOverlay,绘制自己位置的时候,也用的这个类,发现很麻烦。google地图上显示当前位置,会有一个蓝色的指南针并且还有范围指示,查了API后发现google提供了结构,MyLocationOverlay,可以很轻松定位到当位置,只不过木有蓝色的指南针,变成一个圆点了。

类结构

com.google.android.maps

Class Overlay

java.lang.Object

com.google.android.maps.Overlay

Direct Known Subclasses:

ItemizedOverlay, MyLocationOverlay

要实现绘制自己位置,首先要重写MyLocationOverlay ,根据需要重新对应的方法。实例中重写了onLocationChanged,实现自动定位到当前位置,并把地图居中

package demo.map;

import android.content.Context;

import android.graphics.Point;

import android.location.Location;

import android.os.Bundle;

import android.util.Log;

import android.view.KeyEvent;

import android.view.MotionEvent;

import com.google.android.maps.GeoPoint;

import com.google.android.maps.MapView;

import com.google.android.maps.MyLocationOverlay;

/**

*我的位置

*

*

*/

public class MyLocOverlay extends MyLocationOverlay

{

MapView mapView = null;

public MyLocOverlay(Context context, MapView mapView)

{

super(context, mapView);

this.mapView = mapView;

}

@Override

public synchronized void disableCompass()

{

super.disableCompass();

}

@Override

public synchronized void disableMyLocation()

{

super.disableMyLocation();

}

@Override

protected boolean dispatchTap()

{

Log.v("dispatchTap", "点击了当前位置");

return super.dispatchTap();

}

@Override

public synchronized boolean enableCompass()

{

return super.enableCompass();

}

@Override

public synchronized boolean enableMyLocation()

{

return super.enableMyLocation();

}

@Override

public Location getLastFix()

{

return super.getLastFix();

}

@Override

public GeoPoint getMyLocation()

{

return super.getMyLocation();

}

@Override

public float getOrientation()

{

return super.getOrientation();

}

@Override

public boolean isCompassEnabled()

{

return super.isCompassEnabled();

}

@Override

public boolean isMyLocationEnabled()

{

return super.isMyLocationEnabled();

}

@Override

public synchronized void onLocationChanged(Location location)

{

super.onLocationChanged(location);

double lat = location.getLatitude();

double lon = location.getLongitude();

Log.v("onLocationChanged", "location: "

+"纬度:"+lat

+"经度:"+lon

);

GeoPoint point = new GeoPoint((int)(lat*1E6), (int)(lon*1E6));

mapView.getController().animateTo(point);

}

@Override

public void onProviderDisabled(String provider)

{

super.onProviderDisabled(provider);

Log.v("onProviderDisabled", "provider: "+provider);

}

@Override

public void onProviderEnabled(String provider)

{

super.onProviderEnabled(provider);

Log.v("onProviderEnabled", "provider: "+provider);

}

@Override

public boolean onSnapToItem(int x, int y, Point snapPoint, MapView mapView)

{

return super.onSnapToItem(x, y, snapPoint, mapView);

}

@Override

public void onStatusChanged(String provider, int status, Bundle extras)

{

super.onStatusChanged(provider, status, extras);

}

@Override

public boolean onTap(GeoPoint p, MapView map)

{

return super.onTap(p, map);

}

@Override

public synchronized boolean runOnFirstFix(Runnable runnable)

{

return super.runOnFirstFix(runnable);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event, MapView mapView)

{

return super.onKeyDown(keyCode, event, mapView);

}

@Override

public boolean onTouchEvent(MotionEvent e, MapView mapView)

{

return super.onTouchEvent(e, mapView);

}

}

测试类

package demo.map;

import android.content.res.Configuration;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.ZoomControls;

import com.google.android.maps.MapActivity;

import com.google.android.maps.MapController;

import com.google.android.maps.MapView;

public class TestMapActivity extends MapActivity implements OnClickListener

{

MapView mv = null;

MapController mapController = null;

MapView.LayoutParams screenLP;

ZoomControls zoomControls = null;

ImageButton imgButton = null;

MyLocOverlay mlo = null;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mv = (MapView) findViewById(R.id.mapView);

mapController = mv.getController();

mv.setBuiltInZoomControls(true);

mv.setStreetView(true);

mapController.setZoom(21);

//在地图上添加一个定位的按钮

screenLP = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,

MapView.LayoutParams.WRAP_CONTENT, 450, 20,

MapView.LayoutParams.RIGHT);

imgButton = new ImageButton(getApplicationContext());

imgButton.setImageResource(R.drawable.dingwei);

imgButton.setOnClickListener(this);

mv.addView(imgButton, screenLP);

init();

}

private void init()

{

mlo = new MyLocOverlay(this, mv);

/*

*

* enableMyLocation() 尝试开启MyLocation功能,并向LocationManager.GPS_PROVIDER

* LocationManager.NETWORK_PROVIDER注册更新。

*/

mlo.enableCompass();// 开启指南针更新功能。

// 将我的我的位置添加到图层

}

@Override

protected boolean isRouteDisplayed()

{

return false;

}

@Override

public void onClick(View v)

{

Log.e("", "onClick");

if (!mlo.isMyLocationEnabled())

{

mlo.enableMyLocation();

mlo.enableCompass();

mv.getOverlays().add(mlo);

}

}

@Override

protected void onPause()

{

super.onPause();

mlo.disableCompass();

mlo.disableMyLocation();

}

@Override

protected void onResume()

{

super.onResume();

}

}

效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: