Domanda

Ho creato una classe OverlayItem personalizzato in modo che potessi avere in sostanza un tipo di OverlayItem cui segnalino Drawable sarebbe porsi a seconda dello stato di alcuni dati che mi passa dentro.

Ho cercato di ottenere questo risultato, il mio primo tentativo, utilizzando il metodo setMarker all'interno della classe OverlayItem. Una volta che non ha funzionato tento di eseguire l'override del metodo getMarker e farlo ritornare l'indicatore appropriato per rappresentare i dati.

Entrambi questi tentativi conclusa con nulla in corso di elaborazione sulla mappa ... se queste sono commentate i marcatori disegnare bene (a meno che, naturalmente, usare il marcatore di default, che non è quello che voglio).

Ecco il mio codice per la mia classe OverlayItem personalizzato (i metodi commentate Ho provato e non hanno funzionato):

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

C'è un modo per fare quello che sto cercando di fare ... o ho bisogno di fare una classe OverlayItem unico che corrisponde ad ogni stato dei miei dati? (Ew).

È stato utile?

Soluzione

Sono stato in grado di far apparire i marcatori, tuttavia essi appaiono a testa in giù (almeno, penso che siano, potrebbe essere solo che la loro ombra è in alto a sinistra piuttosto che il basso a destra).

tutto quello che dovevo fare era aggiungere questa riga:

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

... così come questa linea per orientare correttamente i marcatori (ho aggiunto questo quando il mio ItemizedOverlay aggiunge elemento di sovrapposizione tan:

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

Altri suggerimenti

Gli stati API che l'indicatore ha bisogno limiti da visualizzare ...

@celestialorb O uno dei tuoi frammenti fa il lavoro da solo (o la mia ha lavorato con entrambi comunque) quando si utilizza setBounds () da solo, si ottiene ciò che si dice di fare ... il rettangolo di selezione per il marcatore è impostato. L'orientamento al di OverlayItem Point e l'ombra dello stato del marcatore, ecc sono impostati di default (non guardare quelli, ma non fanno quello che voglio ...):)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); fa il lavoro completo per voi, impostare i limiti e centrare la parte inferiore del marcatore sul punto (da qui il nome di Metodo elegante).

Ora, per quanto riguarda le migliori pratiche, le lampadine più luminose di quanto dovrà carillon in ...

Prova l'override del metodo onDraw() della classe overlay.

Ecco un altro approccio:

GoogleMaps: personalizzato ItemizedOverlay e OverlayItem, il modo corretto di spettacolo diverso marcatore

credo di preferire questa risposta se ... grazie!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top