2012-04-17 103 views
4

现在下面是我的代码,在地图geopoints之间绘制路径。这工作非常好。我试图实现的不是画一条线,而是用iPhone中的点(。)来显示这条路径。我希望它像这个gp1 ......... gp2,而不是画在像gp1_的单个直线上。绘制点划线(....)线索路径,而不是一个线路(________)

我已经尝试了几乎所有这样做的选择,但仍然没有这方面的成功,任何一个能帮助我解决这个?

private void drawPath(List geoPoints, int color) { 
    List overlays = objMapView.getOverlays(); 
    int loopcount = geoPoints.size() - 1; 
    for (int i = 0; i < loopcount; i++) { 
     GeoPoint p1 = (GeoPoint) geoPoints.get(i); 
     GeoPoint p2 = (GeoPoint) geoPoints.get(i + 1); 
     MyPathOverLay p = null; 
     /**** Marking the start and end of the trailpath ****/ 
     if (i == 0) { 
      Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.greenflag); 
      p = new MyPathOverLay(p1, p2, 0xFFFF0000, true, false, bmp); 
     } else if (i == loopcount - 1) { 
      Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.redflag); 
      p = new MyPathOverLay(p1, p2, 0xFFFF0000, false, true, bmp); 
     } else { 
      p = new MyPathOverLay(p1, p2, 0xFFFF0000, false, false, null); 
     } 
     overlays.add(p); 
    } 
} 



public class MyPathOverLay extends Overlay { 

private GeoPoint gp1; 
private GeoPoint gp2; 
private int color; 
Boolean isFirstPOI; 
Boolean isLastPOI; 
AudioMap audioMap; 
Bitmap bmp; 

public MyPathOverLay(GeoPoint gp1, GeoPoint gp2, int color,Boolean first, Boolean last,Bitmap bitMap) { 
    this.gp1 = gp1; 
    this.gp2 = gp2; 
    this.color = color; 
    this.isFirstPOI= first; 
    this.isLastPOI = last; 
    this.bmp = bitMap; 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 
    Paint paint = new Paint(); 
    Point point = new Point(); 
    projection.toPixels(gp1, point); 
    paint.setColor(color); 
    Point point2 = new Point(); 
    projection.toPixels(gp2, point2); 
    paint.setStrokeWidth(5); 
    paint.setAlpha(120); 
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint); 
    //---translate the GeoPoint to screen pixels--- 
    Point screenPts = new Point(); 
    mapView.getProjection().toPixels(gp1, screenPts); 
    //---translate the GeoPoint to screen pixels--- 
    Point screenPts1 = new Point(); 
    mapView.getProjection().toPixels(gp2, screenPts1); 
    if(isFirstPOI == true){ 
      canvas.drawBitmap(bmp,screenPts.x-20,screenPts.y-40, null); 
    } 
    else if(isLastPOI == true) { 
      canvas.drawBitmap(bmp,screenPts1.x-20,screenPts1.y-35, null); 
    } 
    super.draw(canvas, mapView, shadow); 
} 

}

+1

http://stackoverflow.com/questions/6167236/canvas-drawlines-displays-disjointed-segments – MKJParekh 2012-04-17 05:28:37

+0

这个任务是离子使用旧的谷歌地图api(在写这篇评论的时刻,目前的是v2)? – DNax 2015-06-23 20:57:00

回答

10

多亏了这家伙,我提到这个例子中,它是为我工作。

How do I make a dotted/dashed line in Android?

只需要添加这两条线,

paint.setPathEffect(new DashPathEffect(new float[] {10,10}, 5)); 
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint); 

后我设置,

paint.setAlpha(120); 

@Frankenstein,谢谢

+0

您WEL-加油:) – MKJParekh 2012-04-17 05:53:04

+1

您还可以接受你自己的答案:),还在乎把你的代码,如果你觉得有必要...干杯 – MKJParekh 2012-04-17 05:54:37

+1

@Frankenstein,我能接受我自己的答案后第2天只:(不太大的变化我做的代码,我刚添加那些2线fgPaintSel.setStyle(Style.STROKE); fgPaintSel.setPathEffect(新DashPathEffect(新浮[] {10,20},0));之后我设定为阿尔法油漆 – tejas 2012-04-17 06:18:45