Обновить наложенный объект в Map Activity на Android - PullRequest
2 голосов
/ 14 марта 2011

Мне нужно построить карту и, кроме того, мне нужно отобразить некоторые точки местоположения.Эти местоположения извлекаются из хеш-таблицы в другом классе.Содержание этой хеш-таблицы всегда меняется.Поэтому я ожидаю, что эти точки местоположения на карте будут перемещены по мере изменения хеш-таблицы.Код показан ниже:

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

    MapView mapView = (MapView) this.findViewById(R.id.map);   
    mapView.setStreetView(true);
    mc = mapView.getController();


    mc.animateTo(...);
    mc.setZoom(12); 

    mapView.invalidate();

    List<Overlay> listOfOverlays = mapView.getOverlays();
    listOfOverlays.clear();

    MarkerOverlay mark = new MarkerOverlay(p);
     listOfOverlays.add(mark);

    for(Entry<Long,Pair> p: LQTManager.getInstance().ResultTable.entrySet())
    {

        GeoPoint point = new GeoPoint(
                    (int) (p.getValue().x * 1E6), 
                    (int) (p.getValue().y * 1E6));//some code is not shown
         MarkerOverlay markerOverlay = new MarkerOverlay(point);
         listOfOverlays.add(markerOverlay); 



    }

    mapView.postInvalidate();


}


class MarkerOverlay extends com.google.android.maps.Overlay
{
    public GeoPoint pt;

    public MarkerOverlay(GeoPoint pt){
        this.pt=pt;
        }

    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow);                   

        Point screenPts = new Point();
        mapView.getProjection().toPixels(pt, screenPts);

        Bitmap bmp = BitmapFactory.decodeResource(
            getResources(), R.drawable.pushpin);            

        canvas.drawBitmap(bmp, screenPts.x-16, screenPts.y-32, null); 

        return true;
    }
} 

Есть ли способ обновить наложенные объекты, если я коснусь экрана.Я думаю о том, чтобы поместить некоторые функции в метод переопределения onTap MarkerOverlay.Но я думаю, это не логично, если я пытаюсь заставить Overlay попытаться очистить себя?Любая предложенная идея?

Ответы [ 4 ]

7 голосов
/ 20 января 2012

mapView.postInvalidate () обновит вид карты и перерисовает наложения.Я использую это с Runnable для обновления моих оверлеев каждую секунду:

private Handler handler = new Handler();

private Runnable refreshTask = new Runnable()
{
  public void run()
  {
    handler.removeCallbacks(this);

    mapView.postInvalidate();

    handler.postDelayed(this, 1000);

  }
};
1 голос
/ 24 ноября 2011

Это может быть не идеально, но это сработало для меня, вы можете переместить карту немного вперед и назад, что впоследствии обновляет все наложения.

mapView.getController().scrollBy(1, 1);
mapView.getController().scrollBy(-1, -1);
0 голосов
/ 15 февраля 2014

Используйте

MapController.notifyRepaint();

0 голосов
/ 20 апреля 2011

Когда вы добавляете или удаляете оверлейный элемент, вам нужно вызвать populate () в вашем классе MarkerOverlay.

...