2012-04-17 29 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-displaying-disjointed-segments – MKJParekh

+0

このクエストですか?イオンは、古いGoogleマップapiを使用して(このコメントを書くの瞬間、現在のものはv2です)? – DNax

答えて

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、これらの2行を追加する必要があり

+0

あなたは歓迎:) – MKJParekh

+1

また、あなた自身の答えを受け入れることができます:)あなたがそれが必要であることがわかったらあなたのコードを入れてください...歓声 – MKJParekh

+1

@フランケンシュタイン、私は2日後に自分自身の答えを受け入れることができます: fgPaintSel.setStyle(Style.STROKE); fgPaintSel.setPathEffect(新しいDashPathEffect(新しいfloat [] {10,20}、0));私はアルファを設定した後に塗料 – tejas