Android向MapView添加新点(不刷新)

标签 android refresh android-mapview itemizedoverlay

我正在开发一个寻宝游戏,引导用户完成一条路线。我遇到问题了 在 map 中显示我当前的位置,其中还显示任务点

我扩展了 ItemizedOverlay

public class QuestItemizedOverlay extends ItemizedOverlay<OverlayItem> {

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

    public QuestItemizedOverlay(Drawable defaultmarker) {
        super(boundCenterBottom(defaultmarker));
        populate();     
    }

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

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

    public void removeItem(int index) {
        mOverlays.remove(index);
        populate();
    }

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

}

当我的位置改变时,我得到了监听器:

private final LocationListener locationlistener= new LocationListener() {
        public void onLocationChanged(Location location) {
            Log.i("LOCATION_UPDATED","");
            updateWithNewLocation(location);
            mapview.invalidate();
    }
        public void onProviderDisabled(String provider) {

        }

        public void onProviderEnabled(String provider) { }
        public void onStatusChanged(String provider, int sttus, Bundle extras) { }
    };

updatewithNewlocation方法有以下代码:

private void updateWithNewLocation(Location location) {
      Double curlat=location.getLatitude();
          Double curlong=location.getLongitude();
          GeoPoint point=new GeoPoint((int)(curlong*1E6),(int) (curlat*1E6));
          OverlayItem overlayitem=new OverlayItem(point,"I'm here","This is where you are");
          Drawable marker=this.getResources().getDrawable(R.drawable.eplogo_marker);          
          overlayitem.setMarker(marker);
          itemizedoverlay.addOverlay(overlayitem);
          mapOverlays.clear();
          mapOverlays.add(itemizedoverlay);
}

使用 DDMS 进行调试(只是测试),监听器工作正常,并且当我使用 DDMS 更改位置时,我的 Mapview mOverlays 会增长,但是当我调用 mapview.invalidate() 时什么也没有发生

刷新 map View 的方式是什么?

还有一个问题,如果一个 mapOverlay 具有多个 itemizedoverlay,每个 itemizedoverlay 都带有一些标记,会发生什么情况?

提前致谢

最佳答案

@pekechis:更新mapOverLays(添加新的等)后只需调用

mapView.postInvalidate();

这将刷新 map View 。 您的问题也可能是由于未在 UI 线程内调用此引起的,例如像这样

mActivity.runOnUiThread(new Runnable() {
 public void run() {            
   mapView.postInvalidate();
  }
});

关于Android向MapView添加新点(不刷新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715372/

相关文章:

android - 如何在谷歌地图上获取按钮字段

iphone - 适用于 iPhone 应用程序的 1 XIB 的多个 View Controller

android - 是否可以通过 NFC 一键连接两个 Android 设备交换数据?

java - 将文本复制到剪贴板的按钮

android - 从哪里了解 Android 中的 Google Maps API

刷新按钮上的 JQgrid 单击

wpf - 强制刷新 WPF 控件?

java - 在 Android Studio 中设置移动按钮的计时器

android - 使用 Android SDK 检测附近移动设备的方法?

html - 浏览器刷新行为