Маркери с различни имена на Google Android Map

искам да добавя много различни маркери на карта на Android. Моят код работи добре досега с едно и също наслагване отново и отново:

mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

Това работи добре досега. Но всеки маркер е един и същ. Това, което искам да направя сега, е да имам различни маркери на картата като тези, които виждате в Google Maps Webapp (маркер с име „A“, следващият „B“ и т.н.). Как мога да постигна това? Трябва ли да добавя допълнителен png файл с маркер към приложението си? (marker_a.png, marker_b.png,...) или има по-прост начин да се постигне това? Възможно е също така да има повече от 26 резултата, така че да имам нужда от различни цветове на маркерите.


person David    schedule 15.04.2010    source източник


Отговори (5)


Един от отговорите предоставя решението с различни ItemizedOverlay за всяка група маркери. Можете да постигнете същото с единичен ItemizedOverlay, като извикате overlayItem.setMarker(drawable)

Ако ще зареждате вашите маркери от ресурси, не забравяйте да се обадите:

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

преди да се обадите на setMarker. В противен случай маркерите няма да бъдат показани.

Тъй като маркерите са тип Drawable, можете да ги получите като всеки друг Drawable, включително да ги създадете по време на изпълнение.

person Viktor Brešan    schedule 27.05.2010
comment
Благодаря за съвета, работи много добре. Също така проверете stackoverflow.com/questions/3515638/mapview-marker-shadow, ако вашият маркер не се показва правилно спрямо сянката му. - person Dr1Ku; 25.11.2010

Ето примерен проект, показващ няколко различни PNG на единичен ItemizedOverlay. Просто трябва да замените някои от методите за рисуване, за да се справите с различните PNG.

person CommonsWare    schedule 15.04.2010

Да, имате нужда от друг png, така че ще изглежда така:

mapOverlays = mapView.getOverlays();

// All "A"s
drawable = this.getResources().getDrawable(R.drawable.marker_a);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);

// All "B"s
drawable = this.getResources().getDrawable(R.drawable.marker_b);
itemizedOverlay = new MyItemizedOverlay(drawable);
OverlayItem overlayItem = new OverlayItem(geoPoint, "foo", "bar");
mapOverlays.add(itemizedOverlay);
person CaseyB    schedule 15.04.2010

Аз също бях заседнал в същата ситуация и исках да номерирам щифтовете вместо A,B,C..

Добрата новина е, че намерих решението. Създадох само TextView с Pin фон и вмъкнах число в него динамично и го преобразувах в Drawable.

Можете да създадете различен TextView с цветен фон, който искате.

Ето връзката към моя въпрос, който имам отговори. :)

person Harshad    schedule 30.06.2011

Използвах този код:

 OverlayItem crtItem = new OverlayItem( getPoint( Double.parseDouble(latCoordRow),Double.parseDouble(longCoordRow) ), nameRow , addressRow );

  Drawable crtMarker = markerIconsArray.get(categoryRow); //my current drawable (from a HashMap)
  crtItem.setMarker(crtMarker); // set new marker
  crtMarker.setBounds(0, 0, crtMarker.getIntrinsicWidth(),crtMarker.getIntrinsicHeight()); //setBounds
  boundCenterBottom(crtMarker); //correct shadow problem

Ако не зададетеBounds, вашият drawable няма да се покаже.

person bogdanmogo    schedule 05.12.2011