我目前正在构建一个应用程序,允许用户跟踪他们的手机在 Google map 上的位置。此时,当调用 onLocationChanged() 方法时,应用程序会将当前 GPS 经度和纬度存储在数据库中,并调用 animateTo() 方法到达当前位置。
使用 SDK 1.5,我如何使用 Overlay 将这些点与在 MapView 上绘制的彩色线连接起来?
最佳答案
您必须创建自己的类来扩展 ItemizedOverlay 并在绘制方法中在 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
添加新的地理点。
在将显示 MapView 的 Activity 的 onCreate()
中,您必须添加
overlay = new MyOverlay(null); //overlay must be accessible from onLocationChanged
map.getOverlays().add(overlay); //map = (MapView) findViewById(R.id.mapview)
如果该点位于可见矩形中,您还应该在绘制(或其他地方)中进行检查,以提高绘制速度。
我还没有尝试编译这个,所以如果有一些小错误,请不要责怪我。
关于java - 使用 Overlay 连接从 Android 数据库中获取的 GPS 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478866/