在Android MapView中的多个GeoPoints之间动态绘制线条

时间:2011-10-31 14:52:47

标签: android line android-mapview

我正在开发一个在MapView上有一些自定义叠加层的应用程序 - 代表船只。选择船只时,我在地图上显示其先前的位置,再次使用自定义叠加项目,我想用一条线连接它们。

我在这里看到的一些相关问题是通过重写Draw方法,并通过在Draw方法中对GeoPoints坐标进行硬编码来解决的。这对我没有任何帮助,因为我有很多来自不同血管的点,并且不能将它们全部硬编码到Draw中。

是否有一种简单的方法可以在用于显示自定义叠加层的for循环内的GeoPoints之间画一条线?

提前谢谢你。

1 个答案:

答案 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);
    }
}