Вы должны использовать path.moveTo (pixelPoint.x, pixelPoint.y);в вашем цикле рисования.В противном случае вы нарисуете звезду, а не многоугольник.Вот мой (рабочий) код для аналогичной задачи:
public void draw(Canvas canvas, MapView mapv, boolean shadow) {
super.draw(canvas, mapv, shadow);
Log.i("BikeComputer", "MyOverlay draw");
mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.RED);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(5);
Point p1 = new Point();
path = new Path();
GeoPoint point = geoPoints.get(0);
mapv.getProjection().toPixels(point, p1);
path.moveTo(p1.x, p1.y);
Point pixelPoint = new Point();
Iterator<GeoPoint> i = geoPoints.iterator();
while (i.hasNext()) {
GeoPoint trackPoint = i.next();
mapv.getProjection().toPixels(trackPoint, pixelPoint);
path.lineTo(pixelPoint.x, pixelPoint.y);
path.moveTo(pixelPoint.x, pixelPoint.y);
}
// draw track
canvas.drawPath(path, mPaint);
// start point
mapv.getProjection().toPixels(geoPoints.get(0), pixelPoint);
canvas.drawBitmap(startFlag, pixelPoint.x, pixelPoint.y - 32, null);
// finish point
mapv.getProjection().toPixels(geoPoints.get(geoPoints.size() - 1),
pixelPoint);
canvas.drawBitmap(finishFlag, pixelPoint.x, pixelPoint.y - 32, null);
}
}
и как этот экземпляр создан этим классом:
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
mapView.getProjection();
mapOverlays.add(new MyOverlay());