我目前正在构建一个应用程序,允许用户跟踪他们的手机在谷歌地图上的位置。目前,当调用onLocationChanged()方法时,应用程序将当前GPS经纬度存储在数据库中,并调用animateTo()方法到当前位置。
使用 SDK 1.5,我将如何使用 Overlay 将这些点与 MapView 上绘制的彩色线连接起来?
我目前正在构建一个应用程序,允许用户跟踪他们的手机在谷歌地图上的位置。目前,当调用onLocationChanged()方法时,应用程序将当前GPS经纬度存储在数据库中,并调用animateTo()方法到当前位置。
使用 SDK 1.5,我将如何使用 Overlay 将这些点与 MapView 上绘制的彩色线连接起来?
您必须创建自己的扩展 ItemizedOverlay 的类,并在 draw 方法中在 Canvas 上绘制线条。
例如:
public class MyOverlay extends ItemizedOverlay<OverlayItem> {
private Projection projection;
private Point linePaint;
private Vector<GeoPoint> points;
public MyOverlay(Drawable defaultMarker) {
points = new Vector<GeoPoint>()
linePaint = new Paint();
//set color, stroke width etc.
}
public void addPoint(GeoPoint point) {
points.addElement(point);
}
public void setProjection(Projection projection) {
this.projection = projection;
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
int size = points.size();
Point lastPoint = new Point();
projection.toPixels(points.get(0), lastPoint);
Point point = new Point();
for(int i = 1; i<size; i++){
projection.toPixels(points.get(i), point);
canvas.drawLine(lastPoint.x, lastPoint.y, point.x, point.y, linePaint);
lastPoint = point;
}
}
}
在onLocationChanged()
您应该通过添加新的地理点overlay.addPoint
。在onCreate()
将显示 MapView 的 Activity 中,您必须添加
overlay = new MyOverlay(null); //overlay must be accessible from onLocationChanged
map.getOverlays().add(overlay); //map = (MapView) findViewById(R.id.mapview)
如果该点位于可见矩形中以提高绘图速度,您还应该检查绘图(或其他地方)。
我没有尝试编译这个,所以如果有一些小错误不要怪我。