Android - 在MapView上绘制路径作为叠加层

时间:2010-06-14 09:27:08

标签: java android overlay android-mapview draw

我有一个扩展Overlay和实现Overlay.Snappable的类。我已经覆盖了 draw 方法:

@Override
public void draw(Canvas canvas, MapView mv, boolean shadow)
{
    Projection projection = mv.getProjection();
    ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>();
    //Creating geopoints - ommited for readability
    Path p = new Path();
    for (int i = 0; i < geoPoints.size(); i++) {
    if (i == geoPoints.size() - 1) {
        break;
    }
    Point from = new Point();
    Point to = new Point();
    projection.toPixels(geoPoints.get(i), from);
    projection.toPixels(geoPoints.get(i + 1), to);
    p.moveTo(from.x, from.y);
    p.lineTo(to.x, to.y);
    }
    Paint mPaint = new Paint();
    mPaint.setStyle(Style.FILL);
    mPaint.setColor(0xFFFF0000);
    mPaint.setAntiAlias(true);
    canvas.drawPath(p, mPaint);
    super.draw(canvas, mv, shadow);
}

如您所见,我在地图上制作了一个点列表,我希望它们形成一个多边形。

现在,问题在于当我将绘画样式设置为FILL或FILL_AND_STROKE时,屏幕上没有显示任何内容,但是当我将其设置为中风并设置笔触宽度时,它会实际绘制它应该绘制的内容

现在,我寻找解决方案,但什么都没有出现。你能告诉我在代码本身中是否遗漏了某些东西,或者在绘制Overlay画布时是否存在某些限制?

谢谢

1 个答案:

答案 0 :(得分:4)

一些事情。您应该只使用p.moveTo(from.x, from.y);一次,即第一次想要第一次使用时。

尝试此操作以设置用于绘制多边形的paint对象的属性。

polygonPaint = new Paint();
polygonPaint.setStrokeWidth(2); 
polygonPaint.setStyle(Paint.Style.STROKE);
polygonPaint.setAntiAlias(true); 

希望这会有所帮助。