2

私はGoogleマップで働いています。5 ~ 6 個のノード間にパスを作成したいのですが、ポイント間に線を引くだけです。

次のクラスは、描画用の内部クラスです。

class MyOverlay extends Overlay{
    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);

        Paint  mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(2);

        GeoPoint gP1 = new GeoPoint(19240000,-99120000);
        GeoPoint gP2 = new GeoPoint(37423157, -122085008);
        GeoPoint gP3 = new GeoPoint(20000000 , -50000000) ; 
        GeoPoint[] G = new GeoPoint[3] ;
        G[1] = gP1 ; 
        G[2] = gP2 ; 
        G[3] = gP3 ; 
        Point p1 = new Point();
        Point p2 = new Point();
        Point p3 = new Point () ; 
        Path path = new Path();

        projection.toPixels(gP1, p1);
        projection.toPixels(gP2, p2);
        projection.toPixels(gP3, p3) ; 
        //path.moveTo(p2.x, p2.y);
        //path.lineTo(p1.x,p1.y);
        //path.lineTo(p3.x, p3.y) ;       
        //canvas.drawLines(pts , mPaint) ; 
        canvas.drawPath(path, mPaint);
    }
}

次の 2 行のコードはonCreate()、外部クラスのメソッドのコードです。

 projection = mapView.getProjection();

 mapOverlays.add(new MyOverlay());
4

2 に答える 2

1

上記の答えは正しいです。問題は、に を追加していないことPointですPath。あなたがしていることとまったく同じことについては、この回答を参照してください。また、draw()マップがルートを再描画する必要があるたびに実行されます。これは、基本的にマップが移動するたびに実行されます.ルートを描画するアプリがありMapView、ルートが長くなるとマップが遅くなる可能性があります. だから私はあなたのPaintものをあなたのクラスのコンストラクターの中に入れて、ルートが再描画されるたびに新しいオブジェクトを作成しないようにします。また、複数のポイントを描画する予定がある場合は、次のようなforループを使用します。

Path path = new Path();
for(GeoPoint g : arrayOfGeoPoints) {
            Point next = new Point();
            projection.toPixels(g, next);
            path.lineTo(next.x, next.y);
            path.moveTo(next.x, next.y);
        }
canvas.drawPath(path, myPaint);

シンプルですが、多くのポイントをすばやく効率的に反復処理できます。

幸運を!

于 2012-07-05T14:36:06.237 に答える
0

私は GeoPoint や MapView に詳しくないので、他にも問題があるかもしれませんが、明らかなことを指摘できます。

パスを生成する行をコメントアウトしたので、空のパスを描画しています。で始まる 3 行のコメントを外した場合path.(コメントはそのままにしておきcanvas.drawLines(...)ます)、他に何も問題がないと仮定して、からtoの行と to の行がもう 1行あるはずです。p2p1p1p3

于 2012-07-05T11:32:39.183 に答える