Question

enter image description here

What I want to is display the item just above the line. How do I set item's position for doing that? (as shown in an second image as below)

enter image description here

Was it helpful?

Solution

It seems like currently your marker's center is bound to geopoint, but you want to bound marker's bottom.

So in constructor of your overlay you need to call boundCenterBottom method like this

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

And may be you need to edit your marker image to place red point at bottom's center to horizontal center of image.

Blue rectangle is approximate size of your image. As you can see marker's center is not in center of the image. Green rectangle is how image should be changed to make marker's center match image's center.

enter image description here

OTHER TIPS

private List<Overlay> mapOverlays;

private Projection projection;  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    linearLayout = (LinearLayout) findViewById(R.id.zoomview);
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    mapOverlays = mapView.getOverlays();        
    projection = mapView.getProjection();
    mapOverlays.add(new MyOverlay());        

}

@Override
protected boolean isRouteDisplayed() {
    return false;
}

class MyOverlay extends Overlay{

    public MyOverlay(){

    }   

    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);

        Paint   mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(2);

        GeoPoint gP1 = new GeoPoint(19240000,-99120000);
        GeoPoint gP2 = new GeoPoint(37423157, -122085008);

        Point p1 = new Point();
        Point p2 = new Point();
        Path path = new Path();

        projection.toPixels(gP1, p1);
        projection.toPixels(gP2, p2);

        path.moveTo(p2.x, p2.y);
        path.lineTo(p1.x,p1.y);

        canvas.drawPath(path, mPaint);
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top