【发布时间】:2011-07-07 12:07:05
【问题描述】:
当用户通过多点触控缩放地图时,它总是被点击我的 ItemizedOverlay 中的一个项目。
如果用户实际上是多点触控进行缩放,如何让我的 MapView 不调用叠加层的 onTap?
【问题讨论】:
当用户通过多点触控缩放地图时,它总是被点击我的 ItemizedOverlay 中的一个项目。
如果用户实际上是多点触控进行缩放,如何让我的 MapView 不调用叠加层的 onTap?
【问题讨论】:
您可以在 onTap 方法中获取当前地图视图的缩放级别,如果您发现它与上一个不同,您可以调用return
【讨论】:
我也遇到过这个问题。
rohit mandiwal 的想法很好,但是如果用户,例如,放大然后缩小到相同的级别,仍然可能发生不需要的点击事件。
对此的解决方案是检测onTouchEvent() 中的缩放级别变化,而不是onTap() 中的。我试过这个,它似乎工作。
这是我的代码:
private class LocationOverlay extends ItemizedOverlay<OverlayItem> {
private int lastZoomLevel;
private boolean onTapAllowed;
public LocationOverlay(...) {
//...
lastZoomLevel=mapView.getZoomLevel();
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) {
if (mapView.getZoomLevel()!=lastZoomLevel) {
lastZoomLevel=mapView.getZoomLevel();
onTapAllowed=false;
}
return super.onTouchEvent(motionEvent, mapView);
}
@Override
public boolean onTap(GeoPoint geoPoint, MapView mapView) {
if (!onTapAllowed) {
Log.d("onTap","onTap cancelled, zoom level changed...");
lastZoomLevel=mapView.getZoomLevel();
onTapAllowed=true;
return true;
}
//...
}
【讨论】: