2

私は自分の位置の周りに円を引こうとしています。何が間違っているのかわかりませんが、円が表示されていません:

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

}

誰かが問題がどこにあるか知っていますか?

どうもありがとうございます

4

3 に答える 3

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 は、円に色を与える Paint クラスのオブジェクトです

于 2012-05-11T12:48:59.447 に答える
0

私も同様の問題を抱えています。

Overlayを拡張した内部クラスのvoid1の代わりに、ブール値の描画をオーバーライドすることで解決しました。

次のようになります。

 //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のオーバーレイに追加します。それでおしまい。

于 2012-05-11T14:48:58.807 に答える