Texto que no se muestra en la superposición de MapView

Soy capaz de mostrar un mapa para un área específica con el icono dibujable que muestra la ubicación exacta. El problema es que no veo ningún texto junto al marcador como lo haces con google maps. Parecía que el título o el fragmento de texto que envíe al OverlayItem se mostraría, pero no es el caso.

No he encontrado ningún ejemplo en línea que muestra cómo poner algún tipo de texto junto al icono dibujable en mi ubicación … ¿alguien tiene un ejemplo?

Originalmente seguí el tutorial de Google MapView, pero "Code Magician" tiene una versión mucho mejor: https://codemagician.wordpress.com/2010/05/06/android-google-mapview-tutorial-done-right/

(Desafortunadamente, sin una etiqueta de texto al lado del icono en el mapa)

He descubierto esto por mí mismo … al parecer, es un gran secreto, o algo … de todos modos, disfrutar del código. Felizmente copiar y pegar en toda la red para obtener el secreto.

package myjunk.android.gps; import java.util.List; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; import android.widget.Toast; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; public class ActivityMap extends MapActivity { //member variables private static final String TAG = "MyMapActivity"; private MapView mapView; private MapController mapController; private float mFloatMyLat; private float mFloatMyLon; private float mFloatOtherPersonLat; private float mFloatOtherPersonLon; private List<Overlay> mapOverlays; private Drawable drawable; private MapItemizedOverlay itemizedOverlay; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); mapView = (MapView) findViewById(R.id.map); mapController = mapView.getController(); //zoom to street level showing a few blocks //1 is world view, 21 is the tightest zoom possible mapController.setZoom(17); //mapView.setSatellite(true);//show satellite view mapView.setStreetView(false);//setting this to true causes blue lines around roads mapView.invalidate(); mapOverlays = mapView.getOverlays(); drawable = this.getResources().getDrawable(R.drawable.androidmarker); Bundle extras = getIntent().getExtras(); if (extras != null) { //Get starting locations passed in by previous Activity mStrNickname = extras.getString("NickName"); mFloatMyLat = extras.getFloat("MyLat"); mFloatMyLon = extras.getFloat("MyLon"); mFloatOtherPersonLat = extras.getFloat("OthersLat"); mFloatOtherPersonLon = extras.getFloat("OthersLon"); } itemizedOverlay = new MapItemizedOverlay(drawable, this, 30);//text size: 30 //put my location on the map GeoPoint gPointMe = new GeoPoint((int)(mFloatMyLat * 1000000),(int)(mFloatMyLon * 1000000)); OverlayItem overlayItem = new OverlayItem(gPointMe, "Me", "This is my location"); itemizedOverlay.addOverlay(overlayItem); //show other person on map GeoPoint gPoint = new GeoPoint((int)(mFloatOtherPersonLat * 1000000),(int)(mFloatOtherPersonLon * 1000000)); overlayItem = new OverlayItem(gPoint, mStrNickname, "This is that person's location"); itemizedOverlay.addOverlay(overlayItem); //add overlay items to master list of overlays mapOverlays.add(itemizedOverlay); mapView.invalidate(); mapView.setBuiltInZoomControls(true); //move map over to my position mapController.animateTo(gPointMe); } @Override protected boolean isRouteDisplayed() { return false; } } package myjunk.android.gps; import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.graphics.Paint; import android.graphics.Point; import android.graphics.drawable.Drawable; import com.google.android.maps.GeoPoint; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; public class MapItemizedOverlay extends ItemizedOverlay<OverlayItem> { //member variables private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; private int mTextSize; public MapItemizedOverlay(Drawable defaultMarker, Context context, int textSize) { super(boundCenterBottom(defaultMarker)); mContext = context; mTextSize = textSize; } //In order for the populate() method to read each OverlayItem, it will make a request to createItem(int) // define this method to properly read from our ArrayList @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } @Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); //Do stuff here when you tap, ie : AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); //return true to indicate we've taken care of it return true; } @Override public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); if (shadow == false) { //cycle through all overlays for (int index = 0; index < mOverlays.size(); index++) { OverlayItem item = mOverlays.get(index); // Converts lat/lng-Point to coordinates on the screen GeoPoint point = item.getPoint(); Point ptScreenCoord = new Point() ; mapView.getProjection().toPixels(point, ptScreenCoord); //Paint Paint paint = new Paint(); paint.setTextAlign(Paint.Align.CENTER); paint.setTextSize(mTextSize); paint.setARGB(150, 0, 0, 0); // alpha, r, g, b (Black, semi see-through) //show text to the right of the icon canvas.drawText(item.getTitle(), ptScreenCoord.x, ptScreenCoord.y+mTextSize, paint); } } } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } public void removeOverlay(OverlayItem overlay) { mOverlays.remove(overlay); populate(); } public void clear() { mOverlays.clear(); populate(); } } 

Las cosas en la parte superior de los mapas están en capas diferentes, y cada capa puede contener sólo un tipo de imágenes, por ejemplo, sólo pines de mapa. Necesita crear una superposición separada para cada nuevo tipo de imagen (como texto emergente)

  • Mostrar <ul> <li> en la vista de texto de android
  • Agregar texto a un tipo de datos TextView
  • Generar una imagen con texto personalizado en Android
  • Android - El botón de radio no muestra su texto
  • Android EditText vista Sugerencia flotante en el diseño del material
  • android xml El atributo de texto Textview no puede tomar '<' como valor
  • Android EditText setText no actualizar el texto
  • Necesidad de formatear moneda para TextView
  • Render el texto en la aplicación puramente nativa de Android
  • android: establece textColor con el atributo textAppearance
  • Centrar texto en un brindis en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.