0

地図を表示するAndroidアプリを作成しました。しかし、残念なことに、すべてのマーカーが実際の位置よりも少し低く表示されています。経度と緯度を確認しましたが、現在のものです。

で試しました

marker.setBounds(0, 0, 0 + marker.getIntrinsicWidth(), 0 + marker.getIntrinsicHeight()); 

これは私のマーカーの読み込みコードです

                 while (itr.hasNext()) {


            Business business = itr.next();

            point = new GeoPoint((int)(business.getLatitude() * 1E6),
                    (int)(business.getLongitude() * 1E6));



            List<Overlay> mapOverlays = mMapView.getOverlays();
            LinearLayout markerLayout = (LinearLayout)getLayoutInflater().inflate(
                    R.layout.map_loc_bubble, null);
            CustomItem overlayItem = new CustomItem(point, business, markerLayout,
                    getApplicationContext());

            CustomOverlay itemizedOverlay = new CustomOverlay(overlayItem.getDefaultMarker(),this);
            itemizedOverlay.addOverlay(overlayItem);

            mapOverlays.add(itemizedOverlay);

            mMapView.invalidate();

    }

    if (centerPoint != null) {
        mMapView.getController().setCenter(centerPoint);
        mMapView.getController().animateTo(centerPoint);
    }
}

しかし運がない

ここに私のオーバーレイクラスがあります

 class CustomOverlay extends ItemizedOverlay<CustomItem> {


    public CustomOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
    }


    public CustomOverlay(Drawable defaultMarker, Context context)
    {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }

    @Override
    protected CustomItem createItem(int i) {
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        return mOverlays.size();
    }

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

    public void addOverlay(CustomItem overlay, Drawable marker) {


        marker.setBounds(0, 0, 0 + marker.getIntrinsicWidth(), 0 + marker.getIntrinsicHeight()); 
        overlay.setMarker(marker);
            addOverlay(overlay);
    }

    @Override
    public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapView, false);
    }

    }

}
4

1 に答える 1

1

Projection を使用して Overlay を MapView にマップします。次のように使用します。

オーバーレイで、次のコードを draw メソッドに追加します。

Projection projection = mapView.getProjection();


//GeoPoint class is your latitude, longitude.
GeoPoint point = //TODO assign long, lat

//This is your point on the map
Point myPoint = new Point();

projection.toPixels (point, myPoint);

次に、固定するためのある種の座標系が必要です。以下を使用できます。

// Mark some points through which to draw your circle, or you can do something else
 //This just draws circles of radius 5
RectF myShape = new RectF (myPoint.x-5, myPoint.y-5, myPoint.x+5, myPoint.y+5);

canvas.drawOval (mShape, paint);
于 2012-12-11T13:45:14.453 に答える