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!

  • Color de relieve de superposición de círculo no dibujado siempre en Google Maps v2
  • ¿Hay alguna forma de que los elementos de la interfaz de usuario se superpongan ligeramente (uno encima del otro) sin usar diseños absolutos?
  • Dibujar superposición en Android (en todo el sistema)
  • Cómo dibujar polígono mano libre en Google mapa V2 en Android?
  • Pantalla emergente / superpuesta en panal de android
  • Animación superpuesta a una actividad de la cámara
  • Cómo obtener el largo y lat valor de cuatro esquinas en el mapa en android?
  • Almacenamiento en caché de superposiciones al redondear rectángulos de coordenadas - ¿cómo?
  • ¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?
  • Mostrar un bus móvil en google maps api v2 android
  • ¿Por qué mi sistema se superpone capturando todos los toques (no es posible interacción con la vista subyacente)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.