使用双击标记删除Android MapView多个随机标记

时间:2015-08-14 00:32:35

标签: android overlay android-mapview marker osmdroid

我对标记有疑问。看起来在我创建下一个标记之后,标记的onDoubleTap方法不再可用于PREVIOUS标记(不是最后创建的标记)。有关如何修复它的任何建议我希望能够通过onDoubleTap方法双击它来随机删除每个标记吗?什么导致PREVIOUS标记不会丢失onDoubleTap方法?我注意到我可以双击地图中的任何地方,LAST标记消失。我只想在双重敲击那个标记的ON TOP时才会消失。此外,当我的地图旋转时,标记消失。

Overlay touchOverlay = new Overlay(this) {
ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay = null;

@Override
protected void draw(Canvas arg0, MapView arg1, boolean arg2) {

}

 @Override
 public boolean onSingleTapConfirmed(final MotionEvent e,
 final MapView mapView) {
 Projection proj = mapView.getProjection();
 GeoPoint loc = (GeoPoint) proj.fromPixels((int) e.getX(),
 (int) e.getY());
 ArrayList<OverlayItem> overlayArray = new ArrayList<OverlayItem>();
 OverlayItem mapItem = new OverlayItem("", "", new GeoPoint(
 (((double) loc.getLatitudeE6()) / 1000000),
 (((double) loc.getLongitudeE6()) / 1000000)));
 mapItem.setMarker(OfflineMapDemoActivity.this.getResources()
 .getDrawable(R.drawable.location_mark));
 overlayArray.add(mapItem);
 anotherItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(
                        getApplicationContext(), overlayArray, null);
 mapView.getOverlays().add(anotherItemizedIconOverlay);
 mapView.invalidate();
 return true;
 }


@Override
public boolean onDoubleTap(MotionEvent e, MapView mapView) {
//remove marker here
mapView.getOverlays().remove(anotherItemizedIconOverlay);
mapView.invalidate();
return true;
}
}; //end of Overlay

mapView.getOverlays().add(touchOverlay);

1 个答案:

答案 0 :(得分:0)

您的方法远非预期的结果。你正在对Overlay进行分类,这实际上是一个很糟糕的&#34;类。例如,您将自己实施触摸检测。

我建议采用以下方法:

  • 添加OSMBonusPack库。
  • 首先使用Marker,然后对其进行子类化以实现对onDoubleTap事件的支持
  • 查看Marker.onLongPress源代码,实现自己的onDoubleTap方法(使用hitTest方法检查双击是否在此标记上)。