Java 在点之间绘制路径
我在谷歌地图公司工作。我想在5到6个节点之间创建一条路径,我的意思是在点之间画一条线 以下类是用于绘图的内部类: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
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);
它很简单,但可以快速有效地迭代多个点
祝你好运 您应该将您拥有的点添加到当前未执行的路径中。