Могу ли я расширить класс Overlay? - PullRequest
0 голосов
/ 01 февраля 2012

Я создал класс, который расширяет класс Overlay в Osmdroid (CustomOverlay.java).Тем не менее, на карте ничего не появляется после того, как я вызываю метод createMark () для основного действия, использующего CustomOverlay.java.Я не хочу использовать класс ItemizedOverlay.

Есть идеи?

CustomOverlay.java (класс, расширяющий Overlay)

    public CustomOverlay(Context context) {
    super(context);

}

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

    Point screenPoint = new Point();   
    mapView.getProjection().toPixels(geoPoint, screenPoint);

    super.drawAt(canvas, mapView.getResources().getDrawable(R.drawable.marker), screenPoint.x, screenPoint.y, shadow);

}
}

Это метод, который я вызываю вОсновная деятельность:

  private void createMarker() {
    List<Overlay> mapOverlays = mMapView.getOverlays();
    Overlay c = new CustomOverlay(this);
    mapOverlays.add(c);
    mMapView.invalidate();

}

Ответ:

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

    Point screenPoint = new Point();   
    mapView.getProjection().toPixels(geoPoint, screenPoint);

    Bitmap marker= BitmapFactory.decodeResource(mapView.getResources(), R.drawable.marker);            
    canvas.drawBitmap(marker, screenPoint.x, screenPoint.y, null); 

}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

См. эту ссылку для вашего ответа.:)

0 голосов
/ 01 февраля 2012

Вот скелет настроенного наложения:

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

  private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

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

  protected OverlayItem createItem(int i) {
    return mOverlays.get(i);
  }

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

  public void removeAllOverlay() {
    mOverlays.clear();
  }

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

Видите различия?Где ваш вызов populate ()?Надеюсь, это поможет.

...