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.
- ¿Cómo expandir el marcador de superposición en Google Maps?
- Teclado sobre EditText en segundo clic
- ¿Cómo puedo dibujar una flecha que muestre la dirección de manejo en MapView?
- Alternativa de Android a MetroGridHelper
- Agregar Overlay a un MapView en osmdroid
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.)
- Dibujo es constantemente llamado en mi superposición de mapa de Android
- Eliminar todas las superposiciones
- Android ViewPager: fragmentos superpuestos cuando el ancho de página se establece en 90%
- Superponer una actividad en otra actividad O superponer una vista sobre otra
- Android cómo dibujar la pintura en mano libre en MapView con superposición?
- Android: trazado de dibujo como superposición en MapView
- Cómo crear una superposición de información en Android
- Información sobre Android sobre superposiciones flotantes / elementos sobre otras aplicaciones
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!
- Ejecución de pruebas unitarias antes de cada construcción en Gradle
- Creación de proyecto en Android 5.0 Lollipop con Eclipse Juno