Frage

habe ich eine benutzerdefinierte OverlayItem Klasse, so dass ich im Wesentlichen eine Art von OverlayItem dessen würde gesetzt Drawable Marker selbst über den Zustand einiger Daten je haben könnte, dass ich in sie übergeben.

Ich habe versucht, indem dies zu tun, auf meinem ersten Versuch, die setMarker Methode innerhalb der Klasse OverlayItem verwendet. Sobald das hat nicht funktioniert ich versuche, die getMarker Methode außer Kraft zu setzen und haben es den entsprechenden Marker geben die Daten darzustellen.

Beide mit nichts endet versucht werden auf der Karte gezeichnet ... aber wenn sie den Marker ganz gut zeichnen sind auf Kommentar (außer ihr natürlich den Standard-Marker verwendet werden, die nicht ist, was ich will).

Hier ist mein Code für meine benutzerdefinierten OverlayItem Klasse (die auf Kommentar Methoden Ich habe versucht, und sie haben nicht funktioniert):

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

Gibt es eine Möglichkeit zu tun, was ich zu tun versuchen ... oder muß ich eine einzigartige OverlayItem Klasse zu jedem Zustand meiner Daten entsprechend machen? (Ew.)

War es hilfreich?

Lösung

Ich habe in der Lage die Markierungen erscheinen zu lassen, aber sie erscheinen upside-down (zumindest, ich glaube, sie sind, kann es nur sein, dass ihr Schatten ist an der oberen linken Ecke, anstatt unten rechts).

Alles, was ich tun musste, war diese Zeile hinzufügen:

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

... sowie diese Linie zu orientieren richtig die Markierungen (Ich habe diese, wenn meine ItemizedOverlay Artikel tan Overlay ergänzt:

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

Andere Tipps

Die API besagt, dass der Marker muss Grenzen angezeigt werden ...

@celestialorb Entweder ein Ihr Schnipsels macht den Job allein (oder Mine arbeitete mit entweder sowieso) wenn Sie setBounds () verwenden, allein, Sie bekommen, was Sie sagen, es zu tun ... für Ihre Markierung der Begrenzungsrahmen gesetzt. Die Ausrichtung auf den OverlayItem Point und Schattenzustand des Markers usw Standard festgelegt ist (sahen diejenigen, die nicht, aber sie nicht tun, was ich will ...):)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); macht die ganze Arbeit für Sie, die Grenzen setzen und den Boden des Marker auf den Punkt Zentrierung (daher der stilvolle Methodenname).

Nun zu Best Practices, Glühbirnen Brighter als ich muss Läuten in ...

Versuchen Sie, die onDraw() Methode Ihrer Overlay-Klasse überschreiben.

Hier ist ein anderer Ansatz:

Googlemaps: custom ItemizedOverlay und OverlayItem, die richtige Art und Weise verschiedenen Marker

zu zeigen,

Ich glaube, ich ziehe diese Antwort aber ... danke!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top