2012-04-17 3 views
4

Теперь ниже мой код, который рисует путь между геотомами на карте. Это прекрасно работает. То, что я пытаюсь реализовать, вместо рисования линии, отображает этот путь с точками (.), Как в iPhone. Я хочу, чтобы это было похоже на gp1 ......... gp2 вместо того, чтобы рисовать по одной прямой линии, например gp1_ _ __ _ _gp2.Рисунок пунктирной (....) дорожки тропы вместо линии (________)

Я пробовал почти все варианты для этого, но до сих пор не добился успеха на этом, любой может помочь мне решить это?

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-display-disjointed-segment – MKJParekh

+0

Этот квест иона, используя старые карты google api (на момент написания этого комментария текущий - v2)? – DNax

ответ

10

Благодаря этому парню, я передал этот пример, и это работает для меня.

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

Просто нужно добавить эти 2 линии,

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

You Wel-Come :) – MKJParekh

+1

Вы также можете принять ваши собственные ответы :), Также позаботьтесь о том, чтобы ваш код был вам нужен ... cheers – MKJParekh

+1

@Frankenstein, я могу принять свой собственный ответ только через 2 дня :(много изменений, которые я сделал с кодом, я просто добавил эти 2 строки fgPaintSel.setStyle (Style.STROKE); fgPaintSel.setPathEffect (новый DashPathEffect (новый float [] {10,20}, 0)), после того как я установил alpha для краска – tejas

Смежные вопросы