Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android MapView中动态绘制多个地质点之间的线_Android_Line_Android Mapview - Fatal编程技术网

在Android MapView中动态绘制多个地质点之间的线

在Android MapView中动态绘制多个地质点之间的线,android,line,android-mapview,Android,Line,Android Mapview,我正在开发一个应用程序,该应用程序在MapView上有一些自定义覆盖图,表示船只。选择船只时,我会在地图上显示它以前的位置,同样是自定义的覆盖项目,我想用一条线将它们连接起来 我在这里看到的一些相关问题通过覆盖Draw方法和在Draw方法中硬编码地质点坐标得到了解决。这对我一点帮助都没有,因为我有来自不同船只的许多点,并且无法将它们全部硬编码到绘图中 是否有一种简单的方法可以在用于显示自定义覆盖的for循环内的地质点之间绘制一条线 提前谢谢。使用地图视图中的投影,将地质点转换为“屏幕”点。之后,

我正在开发一个应用程序,该应用程序在MapView上有一些自定义覆盖图,表示船只。选择船只时,我会在地图上显示它以前的位置,同样是自定义的覆盖项目,我想用一条线将它们连接起来

我在这里看到的一些相关问题通过覆盖Draw方法和在Draw方法中硬编码地质点坐标得到了解决。这对我一点帮助都没有,因为我有来自不同船只的许多点,并且无法将它们全部硬编码到绘图中

是否有一种简单的方法可以在用于显示自定义覆盖的for循环内的地质点之间绘制一条线


提前谢谢。

使用
地图视图中的
投影
,将地质点转换为“屏幕”点。之后,您可以使用
Path
绘制所需的线。应使用
path.moveTo(x,y)
指定第一个点,使用
path.lineTo(x,y)
指定其余点。最后调用canvas.drawPath(path)
,就完成了

下面是my 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);
    }
}

为什么你认为你需要硬编码地质点?好的,这确实很有帮助。谢谢!