Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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
Java 在点之间绘制路径_Java_Android_Google Maps_Path_Android Maps - Fatal编程技术网

Java 在点之间绘制路径

Java 在点之间绘制路径,java,android,google-maps,path,android-maps,Java,Android,Google Maps,Path,Android Maps,我在谷歌地图公司工作。我想在5到6个节点之间创建一条路径,我的意思是在点之间画一条线 以下类是用于绘图的内部类: class MyOverlay extends Overlay{ public void draw(Canvas canvas, MapView mapv, boolean shadow){ super.draw(canvas, mapv, shadow); Paint mPaint = new Paint(); mPain

我在谷歌地图公司工作。我想在5到6个节点之间创建一条路径,我的意思是在点之间画一条线

以下类是用于绘图的内部类:

class MyOverlay extends Overlay{
    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);

        Paint  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(2);

        GeoPoint gP1 = new GeoPoint(19240000,-99120000);
        GeoPoint gP2 = new GeoPoint(37423157, -122085008);
        GeoPoint gP3 = new GeoPoint(20000000 , -50000000) ; 
        GeoPoint[] G = new GeoPoint[3] ;
        G[1] = gP1 ; 
        G[2] = gP2 ; 
        G[3] = gP3 ; 
        Point p1 = new Point();
        Point p2 = new Point();
        Point p3 = new Point () ; 
        Path path = new Path();

        projection.toPixels(gP1, p1);
        projection.toPixels(gP2, p2);
        projection.toPixels(gP3, p3) ; 
        //path.moveTo(p2.x, p2.y);
        //path.lineTo(p1.x,p1.y);
        //path.lineTo(p3.x, p3.y) ;       
        //canvas.drawLines(pts , mPaint) ; 
        canvas.drawPath(path, mPaint);
    }
}
这两行代码来自外部类中的
onCreate()
方法:

 projection = mapView.getProjection();

 mapOverlays.add(new MyOverlay());

我不熟悉GeoPoint或MapView,因此您可能会遇到其他问题,但我可以指出显而易见的问题:


您已经注释掉了生成路径的行,因此您正在绘制一条空路径。如果取消注释以
path.
开头的三行(但保留
canvas.drawines(…)
注释),则应该有一行从
p2
p1
,另一行从
p1
p3
,假设没有其他错误。

以上答案是正确的-问题是您没有向
路径添加
点。查看与您正在做的事情完全相似的答案。此外,
draw()
每次地图需要重新绘制路线时都会执行,这基本上是在地图移动的任何时候。我有一个应用程序,可以在
MapView
上绘制路线,让我告诉你,如果你的路线变长,你的地图会变长。所以我会把你的
Paint
东西放在你的类的构造函数中,这样你就不会每次重绘路由时都创建一个新的对象。此外,如果您计划绘制多个点,我将使用类似以下内容的
for
循环:

Path path = new Path();
for(GeoPoint g : arrayOfGeoPoints) {
            Point next = new Point();
            projection.toPixels(g, next);
            path.lineTo(next.x, next.y);
            path.moveTo(next.x, next.y);
        }
canvas.drawPath(path, myPaint);
它很简单,但可以快速有效地迭代多个点


祝你好运

您应该将您拥有的点添加到当前未执行的路径中。