1

現在、MapViewにボート/クルーズ船のルートを表示する必要があります。 クルーズルート

私は自分のバージョンのコーディングを始めましたが、水路のすべての例が同じであるため、「標準的な」方法があるかどうか疑問に思い始めました。私は何時間も探していましたが、まだ何も見つかりませんでしたので、ここで尋ねることにしました。

これが私がこれまでに持っているものです:

Point point2 = new Point();
projection.toPixels(gp2, point2);
paint.setStrokeWidth(5);
paint.setPathEffect(new DashPathEffect(new float[] {8,12}, 5));
paint.setAlpha(defaultColor==Color.parseColor("#6C8715")?200:100);
canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);

それは機能しており、ユーザーがズームするたびに線を調整するだけです。これはそれを行う方法ですか、それともそれを行う標準的な方法がありますか?

どんな助けでもありがたいです、ありがとう。

4

2 に答える 2

1

Overlayを拡張し、その中のdraw()メソッドをオーバーライドします。次に、前に行ったのと同じことを行います。移動/ズームで自動再描画が行われます

この1つの答えはあなたのために働きますkmlファイルを使用して地図上にパスを描く方法は?

于 2012-10-06T18:43:10.697 に答える
1

コードをオーバーレイに移動すると、ユーザーがズーム/パンするときに行を調整することを心配する必要がなくなります。おそらく2つ以上のポイントを描画する必要があるため、Pathクラスを利用することもできます。

import com.google.android.maps.Overlay;

class PathOverlay extends Overlay {

    private void List<GeoPoint>geoPoints;

    public PathOverlay(List<GeoPoint> points) {
        this.geoPoints = geoPoints;
    }   

    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapv, shadow);

        Paint paint = new Paint();
        paint.setStrokeWidth(5);
        paint.setPathEffect(new DashPathEffect(new float[] {8,12}, 5));
        paint.setAlpha(defaultColor==Color.parseColor("#6C8715")?200:100);

        Path path = new Path();
        boolean isFirst = true;
        for (GeoPoint geoPoint : this.geoPoints) {
            Point point = new Point();
            mapView.getProjection().toPixels(geoPoint, point);
            if (isFirst) {
                isFirst = false;
                path.moveTo(point.x, point.y);
            }
            else {
                path.lineTo(point.x,point.y);
            }
        }
        canvas.drawPath(path, paint);
    }
}
于 2012-10-06T18:48:44.500 に答える