2010-06-24 14 views
5

Ich versuche nur, ein Symbol eines Mannes mit einem Kreis unter seinen Füßen in der Mitte des MapView anzuzeigen. Hier ist mein Overlay-Code:Warum ist der Schatten meines MapView-Overlays am falschen Ort?

public class CenterOverlay extends Overlay 
{ 
    private Drawable d; 

    public CenterOverlay(Drawable drawable) 
    { 
     final int w = drawable.getIntrinsicWidth(); 
     final int h = drawable.getIntrinsicHeight(); 
     drawable.setBounds(0, 0, w, h); 
     this.d = drawable; 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     final int mapCenterX = mapView.getWidth()/2; 
     final int mapCenterY = mapView.getHeight()/2; 
     final int x = mapCenterX - d.getIntrinsicWidth()/2; 
     final int y = mapCenterY - d.getIntrinsicHeight(); 
     drawAt(canvas, d, x, y, shadow); 
    } 
} 

Der Code der Overlay hinzufügen, um die MapView funktioniert gut (ich kann das Symbol rechts zu sehen, wo es angenommen hat, zu sein). Das Problem ist, dass der automatisch generierte Schatten an der falschen Stelle ist (etwa die Breite des Symbols links und etwa die Hälfte des Symbols).

Vielen Dank im Voraus für Ihre Hilfe!

Antwort

7

Mit den Begrenzungen, die Sie festlegen - 0, 0, w, h - befindet sich der Ursprung oben links im Symbol, was höchstwahrscheinlich die falsche Schattenberechnung verursacht. Ich kenne die Details dieses Bildes nicht, aber wenn es sich um ein Männersymbol handelt, möchten Sie wahrscheinlich den Ursprung in der Nähe der unteren Mitte. ItemizedOverlay.boundCenterBottom() kann dies für Sie tun, oder wenn Sie mehr feinkörnige Steuerung möchten, können Sie versuchen, mit Code wie folgt spielen:

drawable.setBounds(-width/2, -height, width - (width/2), 0) 
+0

Leider habe ich so lange gedauert hat, zu antworten, ging in den Urlaub. Wie auch immer, das funktioniert - obwohl ich es selbst gelöst habe, indem ich in ItemizedOverlay.boundCenterBottom() konvertiert habe, die eingestellten Werte aufgenommen habe, zu meinem Overlay zurückgegangen bin und diese Werte eingegeben habe. : P Ich hatte ein schlechtes Verständnis davon, wie die Begrenzungsbox funktioniert. –

Verwandte Themen