5

Overlay を拡張し、Overlay.Snappable を実装するクラスがあります。drawメソッドをオーバーライドしました。

@Override
public void draw(Canvas canvas, MapView mv, boolean shadow)
{
    Projection projection = mv.getProjection();
    ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>();
    //Creating geopoints - ommited for readability
    Path p = new Path();
    for (int i = 0; i < geoPoints.size(); i++) {
    if (i == geoPoints.size() - 1) {
        break;
    }
    Point from = new Point();
    Point to = new Point();
    projection.toPixels(geoPoints.get(i), from);
    projection.toPixels(geoPoints.get(i + 1), to);
    p.moveTo(from.x, from.y);
    p.lineTo(to.x, to.y);
    }
    Paint mPaint = new Paint();
    mPaint.setStyle(Style.FILL);
    mPaint.setColor(0xFFFF0000);
    mPaint.setAntiAlias(true);
    canvas.drawPath(p, mPaint);
    super.draw(canvas, mv, shadow);
}

ご覧のとおり、地図上に点のリストを作成し、それらを多角形にします。

さて、問題は、ペイント スタイルを FILL または FILL_AND_STROKE に設定すると画面に何も表示されないことですが、それを単なるストロークに設定し、ストローク幅を設定すると、描画するはずのものが実際に描画されます。

今、私は解決策を探しましたが、何も出てきません。コード自体に設定し忘れたものがあるかどうか、またはオーバーレイ キャンバスに描画するときに何らかの制約があるかどうか教えていただけますか?

ありがとう

4

1 に答える 1

4

いくつかのこと。p.moveTo(from.x, from.y);初めて使用する場合は、初回のみ使用してください。

paintポリゴンの描画に使用するオブジェクトの属性を設定するには、これを試してください。

polygonPaint = new Paint();
polygonPaint.setStrokeWidth(2); 
polygonPaint.setStyle(Paint.Style.STROKE);
polygonPaint.setAntiAlias(true); 

お役に立てれば。

于 2010-06-14T15:20:20.667 に答える