質問

カスタムオーバーレイテムクラスを作成したため、基本的に1種類のオーバーライセムがあり、その描画可能なマーカーが自分が渡すデータの状態に応じて設定することができます。

私は、最初の試みで、 setMarker Overlayitemクラス内のメソッド。それがうまくいかなかったら、私はオーバーライドしようとします getMarker メソッドとそれは、データを表すために適切なマーカーを返します。

これらの試みはどちらもマップに描かれていないことで終わりました...しかし、それらがコメントされている場合、マーカーは正常に描かれています(もちろん、デフォルトマーカーを使用しますが、これは私が望むものではありません)。

これが私のカスタムOverlayitemクラスの私のコードです(私が試したことがあり、それらが機能していないコメントアウトメソッド):

private class MyOverlayItem extends OverlayItem {
    private Context mContext;
    private MyData mData;

    public MyOverlayItem(GeoPoint point, MyData data, Context context) {
        super(point, data.getWhat(), data.getWhere());
        this.mContext = context;
        this.mData = data;

        /*if(data.getTemp() > 200)
            this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l));
        else if(data.getTemp() > 100)
            this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l));
        else
            this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/
    }

    /*@Override
    public Drawable getMarker(int stateBitset) {
        Resources res = this.mContext.getResources();
        if(this.mData.getTemp() > 200)
            return res.getDrawable(R.drawable.icon_data_hot_l);
        else if(this.mData.getTemp() > 100)
            return res.getDrawable(R.drawable.icon_data_neutral_l);
        return res.getDrawable(R.drawable.icon_data_frozen_l);
    }*/
}

私がやろうとしていることをする方法はありますか...または、データの各状態に対応する一意のオーバーライテムクラスを作成する必要がありますか? (EW。)

役に立ちましたか?

解決

私はマーカーを登場させることができましたが、彼らは逆さまに見えます(少なくとも、彼らは彼らの影が底右ではなく左上にあると思うかもしれません)。

私がする必要があるのは、この行を追加することだけでした:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight());

...この行と同様に、マーカーを正しく向けています(ItemizedOverlayが黄褐色のオーバーレイアイテムを追加するときにこれを追加しました。

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));

他のヒント

APIは、マーカーが表示される範囲を表示する必要があると述べています...

@celestialorbあなたのスニペットのいずれかのいずれかのいずれかのいずれかのいずれかのいずれかを単独で行います(またはとにかく私はどちらかで作業しました)。マーカーのOverlayitemのポイントとシャドウの状態への方向はデフォルトに設定されています(それらを調べませんでしたが、私が望むことをしません...):)

moverlay.setmarker(boundcenterbottom(moverlay.getmarker(0)));境界を設定し、マーカーの底をポイントに中心にして、完全な仕事をします(したがって、スタイリッシュな方法名)。

さて、ベストプラクティスに関しては、私がチャイムしなければならないよりも明るい電球...

オーバーライドしてみてください onDraw() オーバーレイクラスの方法。

これが別のアプローチです:

GoogleMaps:カスタムItematedOverlayとoverlayitem、異なるマーカーを表示する正しい方法

私はこの答えが好きだと思います...ありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top