我正在开发一个在MapView上有一些自定义叠加层的应用程序 - 代表船只。选择船只时,我在地图上显示其先前的位置,再次使用自定义叠加项目,我想用一条线连接它们。
我在这里看到的一些相关问题是通过重写Draw方法,并通过在Draw方法中对GeoPoints坐标进行硬编码来解决的。这对我没有任何帮助,因为我有很多来自不同血管的点,并且不能将它们全部硬编码到Draw中。
是否有一种简单的方法可以在用于显示自定义叠加层的for循环内的GeoPoints之间画一条线?
提前谢谢你。
答案 0 :(得分:2)
使用Projection
中的MapView
将GeoPoints转换为“屏幕”点。之后,您可以使用Path
绘制所需的线条。第一点应使用path.moveTo(x, y)
指定,其余指定path.lineTo(x, y)
。最后你打电话给canvas.drawPath(path)
,你就完成了。
下面是我的draw()方法的代码,它围绕一组点绘制一个多边形。请注意,您不必像我在代码中那样使用path.close()
。
public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow){
if(shadow){
if(isDrawing == false){
return;
}
Projection proj = mapView.getProjection();
boolean first = true;
/*Clear the old path at first*/
path.rewind();
/* The first tap */
Paint circlePaint = new Paint();
Point tempPoint = new Point();
for(GeoPoint point: polygon){
proj.toPixels(point, tempPoint);
if(first){
path.moveTo(tempPoint.x, tempPoint.y);
first = false;
circlePaint.setARGB(100, 255, 117, 0);
circlePaint.setAntiAlias(true);
canvas.drawCircle(tempPoint.x, tempPoint.y, FIRST_CIRCLE_RADIOUS, circlePaint);
}
else{
path.lineTo(tempPoint.x, tempPoint.y);
circlePaint.setARGB(100, 235, 0, 235);
circlePaint.setAntiAlias(true);
canvas.drawCircle(tempPoint.x, tempPoint.y, CIRCLE_RADIOUS, circlePaint);
}
}
/* If indeed is a polygon just close the perimeter */
if(polygon.size() > 2){
path.close();
}
canvas.drawPath(path, polygonPaint);
super.draw(canvas, mapView, shadow);
}
}