我有一个使用itemizedlayout在其上放置标记的mapview。如果用户触摸地图上不是标记的点,我想执行操作A,如果用户选择标记,那么我想使用onTap方法进行另一个操作。问题是,我使用的每一种技术,当用户点击标记时,我都会得到两个动作。我非常感谢有关这项工作的任何想法。我会发布代码,但是我尝试过的所有代码都因为它应该正常工作而失败了! :)任何帮助表示赞赏。
我想出来了..我们必须在onTap中调用超类,然后我同时使用onTap方法..查看代码和注释。
public class MarkerMapOverlay extends ItemizedOverlay<OverlayItem> {
Context mContext;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MarkerMapOverlay(Drawable defaultMarker, Context context) {
super(boundCenter(defaultMarker));
mContext = context;
}
public void addOverlay(OverlayItem marker) {
mOverlays.add(marker);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
public boolean onTap (final GeoPoint p, final MapView mapView){
//call the superclass, did it hit a marker? If yes, it returns true onTap(index)
//returned a marker and event is handled and we do stuff with the marker in onTap(index)
if (super.onTap(p, mapView)) {
return true;
}
//We did not hit a marker, do other stuff and return the event has handled.
Toast.makeText(mContext, "touch", Toast.LENGTH_SHORT)
.show();
return true;
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
}
答案 0 :(得分:0)
对于标记操作,请使用onTap
中的ItemizedOverlay
。
对于其他触摸操作,请使用onTouchListener
的{{1}}:
mapView