9

カスタム OverlayItem クラスを作成して、渡したデータの状態に応じて Drawable マーカーが自動的に設定される 1 種類の OverlayItem を基本的に持つことができるようにしました。

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);
    }*/
}

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

4

4 に答える 4

4

マーカーを表示することはできましたが、逆さまに表示されています (少なくとも、そうであると思います。影が右下ではなく左上にあるだけかもしれません)。

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

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

...およびマーカーを正しく配置するためのこの行 (ItemizedOverlay が黄褐色のオーバーレイ項目を追加するときにこれを追加しました:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));
于 2010-08-10T22:35:16.027 に答える
2

API は、マーカーを表示するには境界が必要であると述べています...

@celestialorb setBounds() を単独で使用すると、スニペットのいずれかが単独でジョブを実行します (または、私の場合はいずれかで動作します)。OverlayItem の Point の方向と Marker の影の状態などはデフォルトに設定されています (それらを調べませんでしたが、私が望むことをしませんでした...) :)

mOverlay.setMarker(boundCenterBottom(mOverlay.getMarker(0))); 境界を設定し、マーカーの下部をポイントの中央に配置して、完全な作業を行います (そのため、スタイリッシュなメソッド名が付けられています)。

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

于 2010-08-11T21:11:35.307 に答える
1

別のアプローチを次に示します。

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

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

于 2011-07-08T03:54:48.207 に答える
1

onDraw()オーバーレイ クラスのメソッドをオーバーライドしてみてください。

于 2010-08-10T20:24:05.903 に答える