1

私はこれをしました:

public class LongTravlOverlay extends Overlay{
    private Projection projection;
    private List<GeoPoint> glist;

    GeoPoint gP1; 
    GeoPoint gP2;
    public LongTravlOverlay(Projection a,List<GeoPoint> b){
        projection=a;
        this.glist=b;
    }   
    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);

        Paint   mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(Color.BLUE);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(3);
        for(GeoPoint g1:glist)
        {
            if(gP1!=null)
            {
                gP1=gP2;
                gP2=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6());
            }
            else
            {
                gP1=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6());
                gP2=gP1;
                continue;
            }
        Point p1 = new Point();
        Point p2 = new Point();
        Path path = new Path();

        projection.toPixels(gP1, p1);
        projection.toPixels(gP2, p2);

        path.moveTo(p2.x, p2.y);
        path.lineTo(p1.x,p1.y);

        canvas.drawPath(path, mPaint);
        }
    }
}

それは機能し、すべての点の間に線を引きます。唯一の問題は、最初のポイントと最後のポイントの間に、他のポイントのパス上で交差する線もあるということです。どうすれば削除できますか?

4

1 に答える 1

0

インスタンス変数としてジオポイント gP1 と gP2 があります。draw複数回呼び出されます。

への最初の呼び出しでの反復の最後にdrawgP2が最後のポイントです。への 2 回目以降の呼び出しの最初の繰り返しで、drawgP1最後のポイントにgP2割り当てられ、最初のポイントに割り当てられます。これにより、最初の点と最後の点の間に線が引かれます。これを修正するにはdraw、ジオポイントを反復処理する前に、これらの変数を宣言するか、null に初期化します。

gP1 = null;
gP2 = null;
for(GeoPoint g1:glist) {
//Drawing logic
}
于 2012-10-29T14:03:49.447 に答える