0

我有一个使用 itemizedlayout 放置在其上的标记的地图视图。如果用户触摸了地图上不是标记的点,我想执行动作 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;
}

}

4

1 回答 1

0

对于标记操作,请使用onTapin ItemizedOverlay

对于其他触摸动作,请使用onTouchListener您的mapView

mapView.setOnTouchListener(new OnTouchListener() {

    @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), "touch", Toast.LENGTH_LONG).show();
            return false;
        }
    });
于 2012-04-22T14:16:19.240 回答