Custom OverlayItem sin dibujar

Creé una clase personalizada de OverlayItem de modo que pudiera esencialmente tener un tipo de OverlayItem cuyo marcador Drawable se fijaría dependiendo del estado de algunos datos que paso en él.

He intentado lograr esto por, en mi primer intento, utilizando el método setMarker dentro de la clase OverlayItem. Una vez que no funcionó, intento anular el método getMarker y hacer que devuelva el marcador apropiado para representar los datos.

Ambos intentos terminaron con nada dibujado en el mapa … sin embargo, si se comentan los marcadores dibujar muy bien (excepto por supuesto que utilizan el marcador por defecto, que no es lo que quiero).

Aquí está mi código para mi clase personalizada OverlayItem (los métodos comentados que he probado y no han funcionado):

 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 intentando hacer … o necesito hacer una clase única de OverlayItem correspondiente a cada estado de mis datos? (Ew.)

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

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

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

… así como esta línea para orientar correctamente los marcadores (He añadido esto cuando mi ItemizedOverlay agrega elemento de superposición de bronceado:

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

La API indica que el Marcador necesita límites para mostrarse …

@celestialorb Cualquiera de tus fragmentos hace el trabajo solo (o el mío trabajó con cualquiera de todos modos) cuando usas setBounds () solo, obtienes lo que le dices que haga … el cuadro delimitador para tu marcador está establecido. La orientación hacia el punto de OverlayItem y el estado de sombra del marcador, etc se establecen en el valor predeterminado (no mirar a los de arriba, pero no hacen lo que quiero …) 🙂

MOverlay.setMarker (boundCenterBottom (mOverlay.getMarker (0))); Hace el trabajo completo para usted, fijando los límites y centrando la parte inferior del marcador en el punto (de ahí el nombre con estilo del método).

Ahora, en cuanto a las mejores prácticas, bombillas más brillantes que yo tendré que sonar …

Intente reemplazar el método onDraw() de su clase overlay.

Aquí hay otro enfoque:

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

Creo que prefiero esta respuesta aunque … gracias!

  • Cómo dibujar polígono mano libre en Google mapa V2 en Android?
  • Uso de ItemizedOverlay y OverlayItem en Android Beta 0.9
  • Teclado sobre EditText en segundo clic
  • Eliminar todas las superposiciones
  • ¿Por qué mi sistema se superpone capturando todos los toques (no es posible interacción con la vista subyacente)
  • Aplicación de Android: mostrar elementos de superposición en AsyncTask
  • Animación superpuesta a una actividad de la cámara
  • Android cómo dibujar la pintura en mano libre en MapView con superposición?
  • Comportamiento extraño en el navegador de Android al seleccionar campos
  • Barra de navegación translúcida (Android 4.4) - Mostrar contenido debajo
  • Dibujo es constantemente llamado en mi superposición de mapa de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.