Testo non visualizzato su overlay di MapView

Sono in grado di visualizzare una mappa per un'area specifica con l'icona di disegno che mostra l'ubicazione esatta. Il problema è che non vedo nessun text accanto al marker come si fa con Google Maps. Sembrava che il text del titolo o dello snippet inviato al OverlayItem avrebbe mostrato, ma questo non è il caso.

Non ho trovato alcun esempio online che mostra come mettere un qualche text accanto all'icona disegnata nella mia posizione … qualcuno ha un esempio?

  • Android: Ottenere la dimensione dello schermo per il layout di root solo
  • C'è un modo per riutilizzare il codice constructor per il riassembly
  • (Deprecated) Frammento onOptionsItemSelezionato non chiamato
  • Android: consigli di AsyncTask: class privata o class pubblica?
  • Android: getSupportActionBar () restituisce sempre null nella libreria ActionBarSherlock
  • Valore predefinito di Android CheckBoxPreference
  • Ho inizialmente seguito il tutorial di Google MapView, ma "Codice magico" ha una versione molto migliore di esso: https://codemagician.wordpress.com/2010/05/06/android-google-mapview-tutorial-done-right/

    (Purtroppo senza un'etichetta di text accanto all'icona sulla mappa)

  • Android - Esegui in background - Servizio vs class java standard
  • Seleziona il text da TextView?
  • Tema AppCompat personalizzato che non modifica l'icona di overflow sui dispositivi più vecchi
  • NullPointerException a SuggestionSpan
  • Come posso specificare la cartella del file di output durante la chiamata RECORD_SOUND_ACTION?
  • popBackStack () dopo saveInstanceState ()
  • 2 Solutions collect form web for “Testo non visualizzato su overlay di MapView”

    Ho trovato questo da solo … apparentemente è un grande segreto, o qualcosa … comunque, godere del codice. Felicemente copia e incolla tutta la networking per get il segreto.

    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 MapIthemeszedOverlay ithemeszedOverlay; @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"); } ithemeszedOverlay = new MapIthemeszedOverlay(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"); ithemeszedOverlay.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"); ithemeszedOverlay.addOverlay(overlayItem); //add overlay items to master list of overlays mapOverlays.add(ithemeszedOverlay); 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.IthemeszedOverlay; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; public class MapIthemeszedOverlay extends IthemeszedOverlay<OverlayItem> { //member variables private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; private int mTextSize; public MapIthemeszedOverlay(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(); } } 

    Le cose in cima alle mappe sono su livelli diversi e each livello può contenere solo un tipo di immagini, ad esempio solo i pin di mapping. È necessario creare un sovrapposizione separato per each nuovo tipo di image (come il text popup)

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.