【问题标题】:Multiple overlay items in androidandroid中的多个叠加项目
【发布时间】:2011-01-29 14:20:57
【问题描述】:

我似乎在使用 ItemizedOverlay 和 OveralyItems 时遇到了问题。

我可以让第一个 overlayItem 出现在地图上,但之后没有任何项目。

代码示例开启: http://www.anddev.org/multiple_overlay_items-t12171.html

在这里快速概览:

public class Markers extends ItemizedOverlay {

 private Context ctx;

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

 public Markers(Drawable defaultMarker, Context cont) {

      super(boundCenterBottom(defaultMarker));
      this.ctx = cont;
      // TODO Auto-generated constructor stub
 }

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

 @Override
 public boolean onTap(GeoPoint p, MapView mapView) {
      // TODO Auto-generated method stub
      return super.onTap(p, mapView);
 }


 @Override
 protected boolean onTap(int index) {
      // TODO Auto-generated method stub
      Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show();
      return super.onTap(index);         
 }

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

 public void addOverlay(OverlayItem item) {
      mOverlays.add(item);
      setLastFocusedIndex(-1);
      populate();

 }

 public void clear() {
      mOverlays.clear();
      setLastFocusedIndex(-1);
      populate();
 }
}

使用示例:

Markers usersMarker = new Markers(user,overview.this); 
GeoPoint p = new GeoPoint((int) (lat * 1E6),(int) (lon * 1E6));
OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
item.setMarker(this.user);
usersMarker.addOverlay(item); 

第一个标记出现在地图上,但如果我再添加它们就不会出现? populate() 方法有问题吗?添加所有标记后,我尝试手动调用它,但它仍然没有帮助。请,如果您知道可能出了什么问题,请说出来。

【问题讨论】:

  • 您在使用地图视图的活动中调用 invalidate() 还是 postInvalidate()?
  • 是的,在添加 ItemizedOverlay 到地图叠加层后,我称之为无效......虽然它没有帮助

标签: android map overlay


【解决方案1】:

检查此示例project 它会有所帮助。多次添加多个 addOverlay()s

【讨论】:

    【解决方案2】:

    除了我没有在 addOverlay 函数中调用 setLastFocusedIndex 之外,我的工作代码看起来几乎和你的一模一样。尝试将其注释掉,看看它是否有效。

    【讨论】:

      【解决方案3】:

      我终于找到了答案。我很惭愧地承认这一点,但问题不在于没有绘制的项目,而是我没有在屏幕上看到它们......这两个项目的位置应该几乎相同......但其中一个是用错误计算并被移动了半个世界。

      所以我从不费心去看或缩小...当我这样做时,我发现我的另一个标记位于贫瘠之地的某个地方 :) 感谢所有试图帮助我的人...哦,上面的代码有效 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-27
        • 2012-04-25
        • 2014-07-23
        • 2015-01-06
        • 1970-01-01
        • 2021-03-08
        • 1970-01-01
        相关资源
        最近更新 更多