Question

Je créé une classe OverlayItem personnalisée pour que je puisse avoir essentiellement une sorte de OverlayItem dont le marqueur Drawable se fixerait en fonction de l'état de certaines données que je passe en elle.

J'ai essayé d'y arriver par, lors de ma première tentative, en utilisant la méthode de setMarker dans la classe OverlayItem. Une fois que cela ne fonctionne pas, je tente de passer outre la méthode getMarker et avoir renvoyer le marqueur approprié pour représenter les données.

Ces deux tentatives terminées avec rien en cours d'élaboration sur la carte ... si elles sont commentées les marqueurs tirent très bien (sauf qu'ils bien sûr utiliser le marqueur par défaut, ce qui est pas ce que je veux).

Voici mon code pour ma classe OverlayItem personnalisée (les commentaires des méthodes que j'ai essayé et ils ont pas travaillé):

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

Y at-il un moyen de faire ce que je tente de faire ... ou dois-je faire une classe OverlayItem unique correspondant à chaque état de mes données? (Ew.)

Était-ce utile?

La solution

J'ai été en mesure de faire les marqueurs apparaissent, mais ils apparaissent à l'envers (au moins, je pense qu'ils sont, il peut juste être que leur ombre est en haut à gauche plutôt que le bas à droite).

Tout ce que je besoin de faire était d'ajouter cette ligne:

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

... ainsi que cette ligne pour orienter correctement les marqueurs (j'ai ajouté quand mon ItemizedOverlay ajoute élément de recouvrement tan:

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

Autres conseils

Les états de l'API que le marqueur a besoin de limites à afficher ...

@celestialorb Soit un de vos extraits fait le travail seul (ou le mien a travaillé avec soit de toute façon) lorsque vous utilisez setBounds () seul, vous obtenez ce que vous lui demandez de faire ... la zone de délimitation pour votre marqueur est activé. L'orientation à point et l'état ombre du marqueur du OverlayItem, etc sont définis par défaut (ne pas regarder les, mais ils ne font pas ce que je veux ...):)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); fait le travail complet pour vous, la définition des limites et de centrage du fond du marqueur sur le point (d'où le nom élégant méthode).

Maintenant, pour les meilleures pratiques, les ampoules Brighter que je vais devoir carillon ...

Essayez redéfinissant la méthode onDraw() de votre classe de superposition.

Voici une autre approche:

GoogleMaps: coutume ItemizedOverlay et OverlayItem, la bonne façon de montrer différents marqueurs

Je crois que je préfère cette réponse si ... merci!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top