2

重複の可能性:
Android-マップオーバーレイonTouchEvent / onTap howto?

建物のリストから選択した建物の場所を示す(青いピン)がMapView付いたを使用するAndroidアプリケーションがあります。Overlayユーザーがオーバーレイをタップすると、建物の名前と番号を示すトーストメッセージを表示したいと思います。私が抱えている問題はonTap()、オーバーレイでの処理が、青いピンをタップするか、マップ上のまったく異なる場所をタップするかに関係なく、すべてのタップイベントを取得することです。

私のコードは次のようになります。

searchedPlaceOverlay = new SearchedPlaceOverlay(SearchPlaces.chosenPlace.getLocation(), this) {
    public boolean onTap(GeoPoint p, MapView mapView) {
        Toast toast = Toast.makeText(getApplicationContext(), "<building name and #>", Toast.LENGTH_LONG);
        toast.show();
        return true;
    }
};
mv.getOverlays().add(searchedPlaceOverlay);

SearchedPlaceOverlay伸びcom.google.android.maps.Overlayて青いピンが地図上にうまく表示されonTap()ます。問題を引き起こしているのは、呼び出されるという差別のない性質です。特にタップされたのがこのオーバーレイであったかどうかを判断する簡単な方法はありますか?

4

2 に答える 2

2

@tabbykittenが言ったように、ItemizedOverlayの方が簡単ですが、使用してはいけない場合は、次のアプローチを使用できます。

  1. マーカーから座標X、Yを取得します
  2. あなたのmarkweドローアブルから境界を取得します。マーカーの種類によっては、ジオポイントの中央に配置されない場合があります。
  3. ジオポイント上の位置に境界を調整します。
  4. タップしたポイントのx、y座標を取得します。
  5. 調整されたマーカー境界内にあるかどうかを確認します。

以下のサンプルコード:

public boolean onTap(GeoPoint p, MapView mapView) { 
  Projection projection = mapView.getProjection();
  projection.toPixels(yourMarkerGeopoint, pointTap);
  yourMarker.copyBounds(boundsTap);
  boundsTap.offset(pointTap.x, pointTap.y);
  projection.toPixels(geoPoint, pointTap);
  if(boundsTap.contains(pointTap.x, pointTap.y)){
    //you tap on the marker
    return true;
  }
  return false;
}
于 2012-10-07T14:18:11.977 に答える
1

onTap(int index)を使用したItemizedOverlayがあります。その中にあなたのオーバーレイを置きます。次に、タップされたインデックスがわかります。

于 2012-10-07T05:37:11.127 に答える