5

现在下面是我在地图中绘制地理点之间路径的代码。这工作得很好。我要实现的不是画一条线,而是像在 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);
}

}

4

1 回答 1

11

感谢这个人,我提到了这个例子,它对我有用。

如何在 Android 中制作虚线/虚线?

只需要添加这两行,

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

我设置后,

    paint.setAlpha(120); 

@弗兰肯斯坦,谢谢

于 2012-04-17T05:31:32.703 回答