绘制点之间的路径

时间:2012-07-05 10:41:04

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

我在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());

2 个答案:

答案 0 :(得分: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);

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

祝你好运!

答案 1 :(得分:0)

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

您已注释掉生成路径的行,因此您绘制的是一个空路径。如果您取消注释以path.开头的三行(但留下canvas.drawLines(...)注释),则 应该有一行p2p1和另一行一个从p1p3,假设没有其他错误。