【问题标题】:Drawing a path between points绘制点之间的路径
【发布时间】:2023-04-10 18:09:02
【问题描述】:

我正在使用 Google 地图。我想在 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());

【问题讨论】:

  • 你应该将你拥有的点添加到你目前没有做的路径中。

标签: java android google-maps path android-maps


【解决方案1】:

以上答案是正确的 - 问题是您没有将Point 添加到您的Path。请参阅this 答案,了解与您正在做的事情完全相同的事情。此外,每次地图需要重新绘制路线时都会执行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);

它很简单,但可以快速有效地迭代多个点。

祝你好运!

【讨论】:

    【解决方案2】:

    我对 GeoPoint 或 MapView 不熟悉,所以您可能还有其他问题,但我可以指出显而易见的:

    您已注释掉生成路径的行,因此您正在绘制一个空路径。如果您取消注释以path. 开头的三行(但留下注释canvas.drawLines(...)),您应该有一行从p2p1,另一行从p1 到@987654326 @,假设没有其他问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      相关资源
      最近更新 更多