2011-07-06 8 views
9

Byłem w stanie użyć "MapActivity" i "ItemizedOverlay" do narysowania nakładek na mapach google na Androidzie w Eclipse. Jednak podczas powiększania i zmniejszania mapy nakładka nie zmienia rozmiaru.Czy rozmiar "nakładki" można powiększyć razem z mapą google na Androidzie?

Chcę, aby nakładka została "ustalona" na mapie, a także powiększać i pomniejszać wraz z mapą. Jak to zrobić?

Nie mogę znaleźć samouczka do zdefiniowania obwiedni (np. Ze współrzędnymi GPS jako narożnikami dla obrazu nakładki). Proszę podać linki, jeśli znasz niektóre.

i inne sposoby na zrobienie tego?

Wielkie dzięki.

Odpowiedz

7

Tak, jest. Miałem ten sam problem z moją aplikacją. Oto przykład i działa idealnie. Okrąg narysowany tutaj skaluje się podczas przybliżania i oddalania mapy.

W swojej klasie Nakładka:

public class ImpactOverlay extends Overlay { 

private static int CIRCLERADIUS = 0; 
private GeoPoint geopoint; 

public ImpactOverlay(GeoPoint point, int myRadius) { 
    geopoint = point; 
    CIRCLERADIUS = myRadius; 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    // Transfrom geoposition to Point on canvas 
    Projection projection = mapView.getProjection(); 
    Point point = new Point(); 
    projection.toPixels(geopoint, point); 

    // the circle to mark the spot 
    Paint circle = new Paint(); 
    circle.setColor(Color.BLACK); 
    int myCircleRadius = metersToRadius(CIRCLERADIUS, mapView, (double)geopoint.getLatitudeE6()/1000000); 
    canvas.drawCircle(point.x, point.y, myCircleRadius, circle); 
} 

public static int metersToRadius(float meters, MapView map, double latitude) { 
    return (int) (map.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))));   
} 
} 

Jak nakładki re-czerpie z zoomem, znacznik będzie zmiana rozmiaru z nim na podstawie skali metersToRadius. Mam nadzieję, że to pomoże.

+0

Dodaję do mapy znaczniki do rysowania, jak mogę zmienić rozmiar na podstawie poziomu powiększenia – Mani

0

Po krótkim rozejrzeniu się, wymyśliłem następującą odpowiedź (do zmiany rozmiaru użyłem code from this blog).

I overrode tę samą metodę stosowaną powyżej, z pewnymi różnicami:

  • zamiast metody drawCircle użyłem metody drawBitmap
  • Nie używać obiektu farby
  • I przełączaną cyklicznie nad nakładki pozycji, aby zmienić rozmiar znaczników

kończy się tak:

for(OverlayItem currentPoint:mOverlays){ 
     geopoint =currentPoint.getPoint(); 
     Point point = new Point(); 
     projection.toPixels(geopoint, point);      
     BitmapDrawable bitDraw= ((BitmapDrawable)currentPoint.getMarker(0)); 
     Drawable currentMarker = currentPoint.getMarker(0); 
     /*if (currentMarker!=null){ 

      if (currentWidthRatio<.6f) {     
       currentWidthRatio = .6f;      
      } 
      else if (currentWidthRatio>1.5f) { 
       currentWidthRatio = 1.5f; 
      } 
     }*/ 

     if (bitDraw!=null){   
     Bitmap bitmap = getResizedBitmap(bitDraw.getBitmap(),(int)(currentMarker.getIntrinsicHeight() * currentWidthRatio), 
       (int)(currentMarker.getIntrinsicWidth()*currentWidthRatio)); 

     canvas.drawBitmap(bitmap, 
       point.x - bitmap.getHeight()/2, 
       point.y - bitmap.getWidth()/2, null); 
     }else{ 
      Log.println(Log.DEBUG,"non-existent point", ""); 
     } 
    } 

Ostrożnie! Metoda currentPoint.getMarker (0) pobiera, jak sama nazwa wskazuje, dane bieżącego znacznika. Oznacza to, że masz pierwotny rozmiar, a nie sposób, w jaki się urósł (lub zmniejszył). Trzeba mieć jakiś sposób do:

  • sklepie oryginalny rozmiar mapy
  • sprawdzić jak to się zmieniło od (stosunek)

Kod ja wykomentowane obsługuje maksymalną i minimalną zmianę rozmiaru Chcę pozwolić (aby znaczniki były widoczne bez nakładania się/pozostały czytelne dla ludzkiego oka).

Mam nadzieję, że to pomoże!

Powiązane problemy