ItemizedOverlay только с одним вызовом populate (); - PullRequest
0 голосов
/ 22 марта 2012

Я хочу оптимизировать свой код, вызывая populate ();только после добавления всех элементов OverlayItem.

public class ZoneBase extends ItemizedOverlay {

//------- Class base members

//Context mContext;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
boolean shadow=false;
int gameType;
Context mContext;

// ---------------------------------

    public ZoneBase(Drawable Marker,ZoneProperties z,Context context,boolean ev) {

    super(boundCenter(Marker));

    OverlayItem overlayitem = new OverlayItem(z.point, "Hello", "Stefan cel Mare!");

    addOverlay(overlayitem);

    Marker=null;
    if(ev)
        gameType = z.gameType;
    //System.gc();

    mContext = context;
}

В конструкторе я должен сначала вызвать супер-метод с отрисовкой, но мне действительно нужно было бы передать этому классу массив и создать отрисовку внутри для идобавьте его, тогда я бы назвал populate () ;.Может быть, я должен расширить какой-то другой класс, а не ItemizedOverlay.Спасибо!:)

1 Ответ

1 голос
/ 10 мая 2012

Если вы хотите установить разные маркеры, вы должны сделать это внутри конструктора. Вот пример.

private someMethod() {
    final MapView mapView = (MapView) findViewById(...);
    final LiveOverlay liveOverlay = new LiveOverlay();
    mapView.getOverlays().clear();
    mapView.getOverlays().add(liveOverlay);
}

private class LiveOverlay extends ItemizedOverlay<OverlayItem> {

    private LiveOverlay() {
        super(null);

        final ArrayList<OverlayItem> locationsList = new ArrayList<OverlayItem>();
        for (...) {
            final GeoPoint geoPoint = new GeoPoint(...);
            final OverlayItem overlayItem = new OverlayItem(geoPoint, ...);
            final Drawable marker = ...;
            marker.setBounds(...);
            overlayItem.setMarker(marker);
            locationsList.add(overlayItem);
        }
        setLastFocusedIndex(-1);
        populate();
    }

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

    @Override
    protected OverlayItem createItem(int i) {
        return locationsList.get(i);
    }

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