2012-05-11 8 views
2

J'essaye de dessiner un cercle autour de ma position. Je ne sais pas ce que je fais mal, mais le cercle s ne montrant pas:dessiner un cercle autour de ma position

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 

    if (shadow == false && location != null) { 
     // Get the current location 
     Double latitude = location.getLatitude() * 1E6; 
     Double longitude = location.getLongitude() * 1E6; 
     GeoPoint geoPoint = new GeoPoint(latitude.intValue(), 
       longitude.intValue()); 

     int radius = metersToRadius(100, mapView, latitude); 

     // Convert the location to screen pixels 
     Point point = new Point(); 
     projection.toPixels(geoPoint, point); 

     // Setup the paint 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setStrokeWidth(2.0f); 

     paint.setColor(0xff6666ff); 
     paint.setStyle(Style.STROKE); 
     canvas.drawCircle(point.x, point.y, radius, paint); 

     paint.setColor(0x186666ff); 
     paint.setStyle(Style.FILL); 
     canvas.drawCircle(point.x, point.y, radius, paint); 
    } 
    super.draw(canvas, mapView, shadow); 
} 

Edit: Juste pour préciser que je vais poster mes cours: CustomItemizedOverlay

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

protected final List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

protected final Context mContext; 

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

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

@Override 
protected OverlayItem createItem(int i) { 
    // TODO Auto-generated method stub 
    return mOverlays.get(i); 
} 

public void removeOverlay(OverlayItem overlay) { 
    mOverlays.remove(overlay); 
    populate(); 
} 

public void clear() { 
    mOverlays.clear(); 
    populate(); 
} 

@Override 
public int size() { 
    // TODO Auto-generated method stub 
    return mOverlays.size(); 
} 

@Override 
protected boolean onTap(int i) { 
    OverlayItem itemClicked = this.mOverlays.get(i); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this.mContext); 

    builder.setTitle(itemClicked.getTitle()); 
    builder.setMessage(itemClicked.getSnippet()); 
    builder.setCancelable(true); 

    AlertDialog alert = builder.create(); 
    alert.show(); 

    return true; 
} 

Et PcCustomizedOverlay

public class PcCustomItemizedOverlay extends CustomItemizedOverlay { 

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

private Location location; 

public PcCustomItemizedOverlay(Drawable defaultMarker, Context context) { 
    super(defaultMarker, context); 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 

    if (shadow == false && location != null) { 
     // Get the current location 
     Double latitude = location.getLatitude() * 1E6; 
     Double longitude = location.getLongitude() * 1E6; 
     GeoPoint geoPoint = new GeoPoint(latitude.intValue(), 
       longitude.intValue()); 

     int radius = metersToRadius(40, mapView, latitude); 

     // Convert the location to screen pixels 
     Point point = new Point(); 
     projection.toPixels(geoPoint, point); 

     // Setup the paint 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setStrokeWidth(2.0f); 

     paint.setColor(0xff6666ff); 
     paint.setStyle(Style.STROKE); 
     canvas.drawCircle(point.x, point.y, radius, paint); 

     paint.setColor(0x186666ff); 
     paint.setStyle(Style.FILL); 
     canvas.drawCircle(point.x, point.y, radius, paint); 
    } 
    super.draw(canvas, mapView, shadow); 
} 

public Location getLocation() { 
    return location; 
} 

public void setLocation(Location location) { 
    this.location = location; 
} 

}

est-ce que quelqu'un sait où est le problème?

Merci beaucoup

+0

Si j'ai raison, vous essayez d'implémenter l'image de mylocation comme dans google map? – Akram

+0

@Akki oui, c'est ce que je suis en train d'essayer, mais je n'utilise pas MyLocationOverlay, juste une extension de classe ItemizedOverlay – pindleskin

+0

vérifier mes années ci-dessous – Akram

Répondre

1

Je pense que votre problème dans void draw.

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    super.draw(canvas, mapView, shadow); 
    Projection projection = mapView.getProjection(); 

    if (shadow == false && location != null) { 
     // Get the current location 
     Double latitude = location.getLatitude() * 1E6; 
     Double longitude = location.getLongitude() * 1E6; 
     GeoPoint geoPoint = new GeoPoint(latitude.intValue(), 
       longitude.intValue()); 

     int radius = metersToRadius(100, mapView, latitude); 

     // Convert the location to screen pixels 
     Point point = new Point(); 
     projection.toPixels(geoPoint, point); 

     // Setup the paint 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setStrokeWidth(2.0f); 

     paint.setColor(0xff6666ff); 
     paint.setStyle(Style.STROKE); 
     canvas.drawCircle(point.x, point.y, radius, paint); 

     paint.setColor(0x186666ff); 
     paint.setStyle(Style.FILL); 
     canvas.drawCircle(point.x, point.y, radius, paint); 
    } 

} 

Regardez ici aussi pour mettre l'image sur votre carte. drawing image as mapoverlay

+0

Y at-il de toute façon pour y parvenir juste avec ItemizedOverlay? – pindleskin

3

essayer ce code

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mapView = (MapView) findViewById(R.id.mapview); 
    MapController mc = mapView.getController(); 
    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(MainMap.this, mapView); 
    mapView.getOverlays().add(myLocationOverlay); 
    mc.animateTo(new GeoPoint(lat, lng)); 
    mc.setZoom(15); 
    mapView.invalidate(); 
} 

Ne pas oublier d'ajouter overlay.enableMyLocation(); dans onresume() et overlay.disableMyLocation(); dans le pause

au lieu du code ci-dessus si vous voulez dessiner cercle autour de vous point vous pouvez utiliser exemple de code:

Point screenPnts =new Point(); 
GeoPoint curr_geopoint = new GeoPoint((int)(location.getLatitude()*1E6),(int)(location.getLongitude()*1E6)); 
mapview.getProjection().toPixels(curr_geopoint, screenPnts); 
canvas.drawCircle(screenPnts.x, screenPnts.y, 15, paint); 

faire quelques essais & erreur pour obtenir ce cercle autour du point en manipulant screenPnts Valeurs .x et screenPnts.y. ici la peinture est l'objet de la classe Paint pour donner la couleur au cercle

+0

Merci, mais la classe MyLocationOverlay limite trop mon application, j'aimerais utiliser ItemizedOverlay. – pindleskin

0

J'ai eu un problème similaire.

Résolu avec un dessin booléen prioritaire au lieu d'un dessin vide dans la classe interne qui étendait la superposition.

Il ressemblerait à ceci:

//inner class MapOverlay 
class MapOverlay extends com.google.android.maps.Overlay 
{ 
    @Override 
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) 
    { 
     super.draw(canvas, mapView, shadow);     

     Projection projection = mapView.getProjection(); 

     //the rest of your code here................ 

     super.draw(canvas,mapView,shadow); 

     return true; 
    } 
} 

construire votre cercle avec

MapOverlay mapOverlayCircle = new MapOverlay(); 

et l'ajouter à votre Superpositions dans votre Mapview. c'est tout.

+0

Merci, mais j'aimerais étendre ItemizedOverlay, pas Overlay – pindleskin

Questions connexes