2

現在、最新のosmdroidライブラリ (3.0.10) を使用して、カスタム マーカーを地図上にItemizedOverlay. Drawable クラスを拡張して、独自の描画を実装しました。しかし、私drawablesは正しく描かれていません。ビットマップ画像、円、テキストを重ねて描画します。ビットマップは描画されますが、円とテキストは表示されません。で同じドローアブルを使用するとimageview、すべて問題ありません。

私のドローアブルの onDraw メソッドのコードは次のとおりです。

@Override
public void draw(Canvas canvas) {
    canvas.save();
    canvas.translate(getBounds().left, getBounds().top);
    //this draws fine
    canvas.drawBitmap(bitmap, new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), new Rect(0,0,mWidth,mWidth), mPaint);
    //this is not
    canvas.drawCircle(mHeight/2, mHeight/2, mHeight/2, mPaint);
    //neither
    canvas.drawText("X", mHeight/2, mHeight/2, mPaint2);
    canvas.restore();
}

ビットマップに円とテキストを描画し、提供されたキャンバスに描画してみました。それは機能していますが、それは要点全体を殺します。

どんな助けでも大歓迎です。

4

2 に答える 2

0

osmdroid のソースを調べて 1 日を過ごした後、問題を解決することができましたが、そもそもなぜそこにあるのかわかりませんでした。Osmdroid は ISafeCanvas インターフェイス (および SafeTranslatedCanvas 実装) を使用してキャンバスをラップし、高ズーム レベルの変換の不具合に対処します。コードに単純なエラーは見つかりませんでしたが、ItemizedOverlay の draw メソッドをオーバーライドし、カプセル化されたキャンバスを getSafeCanvas メソッドで返すだけの独自の ISafeCanvas 実装を作成することで、オーバーレイを描画するときにメカニズムをバイパスしました。 .

@Override
protected void draw(Canvas canvas, MapView mv, boolean shadow) {
    drawSafe(new MyCanvas(canvas),mv,shadow);
}

これは最善の解決策とはほど遠いものです。SafeCanvas には理由があるため、この方法を使用する場合は徹底的なテストを行うことをお勧めします。

注: 私は Android 4.1.1 のみを使用しており、この問題が他のデバイスに存在するかどうかはわかりません。

于 2013-06-02T09:38:28.103 に答える