Pregunta

I creado una clase OverlayItem personalizado para que en esencia podría tener un tipo de OverlayItem cuyo marcador Disponibles sería fijado en función del estado de algunos datos que me pase en ella.

Me han tratado de lograr esto, en mi primer intento, utilizando el método dentro de la clase setMarker OverlayItem. Una vez que no funcionó intento de anular el método getMarker y tienen que devolver el marcador apropiado para representar los datos.

Ambos de estos intentos terminaron sin nada que se dibuja en el mapa ... sin embargo, si se comentan los marcadores dibujan muy bien (excepto los de utilizar supuesto el marcador por defecto, que no es lo que quiero).

Aquí está mi código para mi clase OverlayItem personalizado (los métodos comentados fuera, me han intentado y no han trabajado):

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

¿Hay una manera de hacer lo que estoy tratando de hacer ... o tengo que hacer una clase OverlayItem único correspondiente a cada estado de mis datos? (Ew.)

¿Fue útil?

Solución

he podido para que aparezcan los marcadores, sin embargo, están apareciendo al revés (al menos, creo que son, simplemente puede ser que su sombra es en la parte superior izquierda en lugar de la parte inferior derecha).

Todo lo que tenía que hacer era añadir esta línea:

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

... además de esta línea para orientar correctamente los marcadores (añadí esto cuando mi ItemizedOverlay agrega elemento de superposición de color tostado:

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

Otros consejos

Los estados de la API que necesita el marcador de los límites que se muestran ...

@celestialorb Cualquiera de uno de sus fragmentos que hace el trabajo solo (o la mía trabajó con cualquiera de todos modos) cuando se utiliza setBounds () por sí sola, se obtiene lo que diga que haga ... el cuadro de límite para su marcador es ajustado. La orientación a estado Point y la sombra de la OverlayItem del marcador, etc, se ha establecido como predeterminado (no se veía los de arriba, pero que no hacen lo que yo quiero ...):)

mOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); hace el trabajo completo para usted, el establecimiento de los límites y el centrado de la parte inferior del marcador en el punto (de ahí el nombre de Método estilo).

Ahora, en cuanto a las mejores prácticas, bulbos más brillantes de lo que tendrá que meter su cuchara ...

Pruebe reemplazando el método onDraw() de su clase de superposición.

Aquí es otro enfoque:

GoogleMaps: ItemizedOverlay personalizada y OverlayItem, la forma correcta de mostrar diferentes marcador

Creo que prefiero esta respuesta, aunque ... gracias!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top