2012-04-02 33 views
1

Hallo ich benutze eine Größe Version dieser Markierung (http://www.clker.com/clipart-orange-pin-4.html) zum Anzeigen von Markierungen in Google Maps auf Android.Android benutzerdefinierte Karte Marker Grenzen

Das Problem ist, ich weiß nicht, wie man den Markierungspunkt mit den Koordinaten übereinstimmt. Der Pfeilpunkt liegt bei etwa 1/5 der Breitenkoordinaten und MAX der Höhe.

hier ist meine Klasse

public class GestionaleItemizedOverlay extends com.google.android.maps.ItemizedOverlay { 

    public GestionaleItemizedOverlay(Drawable defaultMarker, Context context) { 
     //super(boundCenterBottom(defaultMarker)); 
     super(boundCenter(defaultMarker)); 
     this.mContext = context; 
    } 
... 

Und das

this.marker_poi = this.getContext().getResources().getDrawable(R.drawable.marker); 
    this.marker_poi.setBounds(this.marker_poi.getIntrinsicWidth()/2, this.marker_poi.getIntrinsicHeight(), this.marker_poi.getIntrinsicWidth()/2, 0); 
new GestionaleItemizedOverlay(this.poi, this.context); 

Muss ich auf den Marker zu setBounds, bevor es an den Konstruktor übergeben? und warum macht super (defaultMarker), dass alle marker nicht angezeigt werden?

Antwort

1

Ja Sie setBounds brauchen, aber man kann es im Konstruktor tun, ist das, was ich im Konstruktor tun es auf der linken unteren Ecke zu setzen:

public class CustomOverlay extends ItemizedOverlay<CustomOverlayItem> { 
    public CustomOverlay(Drawable defaultMarker, Context context) { 
     super(defaultMarker); 
     defaultMarker.setBounds(0, -defaultMarker.getIntrinsicHeight(), defaultMarker.getIntrinsicWidth(), 0); 
    } 

Sie werden ein wenig hinzufügen müssen Extra auf der linken Seite der Grenzen, um den Mittelpunkt an der richtigen Position zu machen. Sie sollten daran denken, dass dies in px eingestellt ist, also machen Sie eine Art von DP-Konverter, so dass es für Ihre verschiedenen Bilder für jede Bildschirmgröße richtig eingestellt ist.

Über die zweite Frage benötigen Sie einen Kontext, um zu wissen, wo Sie das Overlay hinzufügen können. Ohne den Kontext erstellen Sie einfach Ihr Overlay, ohne ihm einen Verweis darauf zu geben, wo es verwendet werden soll (Sie könnten dies später hinzufügen, wenn Sie möchten).

+1

?! !! Welches ist die linke Seite gebunden oder die richtige Position? Diese Antwort erklärt nichts – max4ever

2

Die vorherige Antwort ist richtig, Sie müssen mit dem BOUNDS-Wert Ihres Markers spielen.

Wie Sie sicher wissen, bestimmt das Begrenzungsrechteck die Größe des Objekts ... Der Marker auf Ihrer Karte wird sich mit der oberen linken Koordinate Ihres Markers an der GPS - Koordinate ausbreiten, wenn Sie einfach einen aufrufen würden Normal setzt die Größe Ihres Bildes fest.

Was Sie tun müssen, ist die Grenzen auf Ihrem Bild zu ändern, so dass der Teil des Bildes Sie über dem Punkt auf der Karte, die Sie wollen, ist.

Also, wenn Ihre Größe Bild 20 x 20, und Ihre tatsächliche Pfeilspitze (vorausgesetzt, das Bild ist ein Pfeil, und Sie wollen es genau mit dem Punkt auf der Karte aufgereiht) ist sagen X = 4 und Y = 10, müssen Sie die Grenzen Ihres Bildes entsprechend ändern, um das Bild "zu verschieben", wo Sie es wollen.

Da 0,0 das Bild um 4 Pixel nach rechts und 10 Pixel unter den tatsächlichen Punkt auf der Karte, mit der Sie es verbinden, setzen würde, sollten Ihre Grenzen nicht 0,0, X, Y, sondern -4 sein , -10, X-Größe von Bild-4, Y-Größe von Bild-10 (in diesem Beispiel sind die X-Größe des Bildes und die Y-Größe des Bildes 20, sollten jedoch die für Ihren Fall geeigneten Werte verwenden.)

Verwandte Themen