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

マーカー アクションには を使用onTapItemizedOverlayます。

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 に答える