Android MapView DrawLine - PullRequest
       23

Android MapView DrawLine

1 голос
/ 28 апреля 2011

Я пытаюсь нарисовать несколько путей наложения на моей карте.

Это мой класс ItemizedOverlay:

package com.state.park;

import java.util.ArrayList;

import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;

public class Flytrap extends ItemizedOverlay<OverlayItem> {
private GeoPoint gp1, gp2;
private int color;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public Flytrap(Drawable defaultMarker){
    super(defaultMarker);
}

public Flytrap(GeoPoint gp1, GeoPoint gp2, int color, MapView mapView, Drawable defaultMarker) {
    super(boundCenterBottom(defaultMarker));
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.color = color;
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {

    Projection projection = mapView.getProjection();
    Paint paint = new Paint();
    Point point = new Point();
    projection.toPixels(gp1, point);
    paint.setColor(color);
    Point point2 = new Point();
    projection.toPixels(gp2, point2);
    paint.setStrokeWidth(5);
    paint.setAlpha(120);
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);
    super.draw(canvas, mapView, shadow);
}

public void addItem(OverlayItem item){
     mOverlays.add(item);
        populate();

}

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

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


 }

И это MapActivity, в котором я его называю.

ArrayList<Double> lon = new ArrayList<Double>();
ArrayList<Double> lat = new ArrayList<Double>();
ArrayList<GeoPoint> geopoints = new ArrayList<GeoPoint>();
List<Overlay> overlays;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.map);

    String flytrap = readRawTextFile(getBaseContext(), R.raw.flytrap);
    getlonlat(flytrap);

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    mc = mapView.getController();
    myLoc = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(myLoc);
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locListener = new MyLocationListener();
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
            locListener);

    Drawable d = getResources().getDrawable(R.drawable.icon);

    for (int i = 1; i < geopoints.size(); i++) {

        mapView.getOverlays().add(new Flytrap(geopoints.get(i-1), geopoints.get(i), Color.BLUE, mapView, d ));
    }

    mapView.invalidate();
}

protected boolean isLocationDisplayed() {
    return myLoc.isMyLocationEnabled();
}

protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
   }

Любые предложения о том, как отображать строки накарта.На данный момент он работает.но наложение не отображается.

Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2012

вместо

mapView.invalidate();

попробовать

mapView.postInvalidate();

Также ваш оверлей должен расширяться Наложение вместо ItemizedOverlay , как те, которые предназначены для кликабельного аэростата и тому подобного. Оверлей не должен нуждаться в MapView внутри конструктора, так как он доступен уже в методе draw.

...