Android - 在MapView上绘制路径作为覆盖层

5

我有一个类,它扩展了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个回答

4
一些事情需要注意。你只应该在第一次想要进行移动时使用 p.moveTo(from.x, from.y);
尝试使用以下代码为绘制多边形的 paint 对象设置属性。
polygonPaint = new Paint();
polygonPaint.setStrokeWidth(2); 
polygonPaint.setStyle(Paint.Style.STROKE);
polygonPaint.setAntiAlias(true); 

希望这能帮到你。

谢谢您的回答,问题是调用了太多次 moveTo。 - Rabas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接