2012-05-11 135 views
2

我想围绕我的位置绘制一个圆圈。我不知道我在做什么错,但圆S没有显示:围绕我的位置绘制圆圈

@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); 
} 

编辑:只是为了说清楚我要去发布我的课: 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; 
} 

而且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; 
} 

}

有谁知道在哪里 问题?

非常感谢您

+0

如果我正确的你想要实现mylocation图像相同的谷歌地图? – Akram

+0

@Akki是的,这就是我正在尝试,但我没有使用MyLocationOverlay,只是一个扩展ItemizedOverlay类 – pindleskin

+0

检查我的答案下面 – Akram

回答

1

我认为问题在你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); 
    } 

} 

在这里也可以看看把图像放在你的地图上。 drawing image as mapoverlay

+0

有没有办法实现它只是ItemizedOverlay? – pindleskin

3

试试这个代码

@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(); 
} 

不要忘记添加overlay.enableMyLocation();在onresume()和overlay.disableMyLocation();在暂停

,而不是上面的代码,如果你想围绕你点,你可以使用下面的示例代码绘制圆:

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); 

做一些试验&错误通过操纵screenPnts绕过的点圈.x和screenPnts.y值。这里油漆是Paint类的对象,可以将颜色赋予圆圈

+0

谢谢,但MyLocationOverlay类限制了我的应用太多,我想使用ItemizedOverlay。 – pindleskin

0

我有类似的问题。

解决它与重写布尔绘制而不是无效的内部类扩展覆盖。

它应该是这样的:

//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; 
    } 
} 

构建你的圈子与

MapOverlay mapOverlayCircle = new MapOverlay(); 

,并在你的MapView添加到您的叠加。而已。

+0

谢谢,但我想扩展ItemizedOverlay,而不是Overlay – pindleskin