2013-01-24 14 views
23

現在、アンドロイドマップv2はクリック後マーカー位置にスナップします。私はこの動作を無効にしたいのですが、それを行うオプションはありません。アンドロイドマップをクリックした後でマーカーにスナップしないv2

誰かがそれを修正する方法を知っていますか?私はマーカーから読んだものに基づいて

+0

?どういう意味ですか?もっと詳しく説明してください。 – BBonDoo

+0

私は同様の解決策を探しています。私の「スナップ」の解釈は、カメラをそのマーカーの場所に移動させることです。基本的に、ユーザーがマーカーをクリックしたときにカメラが動かないようにするにはどうすればよいですか? – DMCApps

答えて

50

- GoogleマップのAndroid API(https://developers.google.com/maps/documentation/android/marker#marker_click_events

マーカーのクリックイベント

あなたは、マーカー上のクリックイベントをリッスンするためにOnMarkerClickListenerを使用することができます。このリスナーを に設定するには、GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)を呼び出します。 ユーザーがマーカーをクリックすると、onMarkerClick(マーカー)が呼び出され、マーカーとして が引数として渡されます。このメソッドは、 がイベントを消費したかどうかを示すブール値を返します(デフォルト動作を抑制する)。 がfalseを返すと、カスタム動作に加えてデフォルトの動作が発生します。 マーカークリックイベントのデフォルトの動作は、情報ウィンドウ(利用可能な場合) を表示し、マーカーがマップの中央にくるようにカメラを移動することです。

このメソッドをオーバーライドして、マーカーを開き、trueを返してイベントを消費する可能性があります。

// Since we are consuming the event this is necessary to 
// manage closing opened markers before opening new ones 
Marker lastOpened = null; 

mMap.setOnMarkerClickListener(new OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
     // Check if there is an open info window 
     if (lastOpened != null) { 
      // Close the info window 
      lastOpened.hideInfoWindow(); 

      // Is the marker the same marker that was already open 
      if (lastOpened.equals(marker)) { 
       // Nullify the lastOpened object 
       lastOpened = null; 
       // Return so that the info window isn't opened again 
       return true; 
      } 
     } 

     // Open the info window for the marker 
     marker.showInfoWindow(); 
     // Re-assign the last opened such that we can close it later 
     lastOpened = marker; 

     // Event was handled by our code do not launch default behaviour. 
     return true; 
    } 
}); 

これはテストされていないコードですが、これは実行可能な解決策です。

おかげで、 DMAN我々は次のことを行うことができるはず、しかしmarker.isInfoWindowShown()は常にfalseを返すためthis bugのために、それは動作しません表示されます

+0

これは完璧な、ありがとう! –

+0

@ D-32問題はありません! – DMCApps

+0

うん!ありがとう! 私の場合は、onMapClick(marker.getPosition())を呼び出して、マーカーのクリックがマーカーの位置で地図をクリックするように動作するようにします。次に、イベントが処理されたことを通知するためにtrueを返します。 –

1

:しかし

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
     if (marker.isInfoWindowShown()) { 
      marker.hideInfoWindow(); 
     } else { 
      marker.showInfoWindow(); 
     } 
     return true; 
    } 
}); 

は、以下の同じ効果があり、作業を行います。

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 

    Marker currentShown; 

    public boolean onMarkerClick(Marker marker) { 
     if (marker.equals(currentShown)) { 
      marker.hideInfoWindow(); 
      currentShown = null; 
     } else { 
      marker.showInfoWindow(); 
      currentShown = marker; 
     } 
     return true; 
    } 
}); 

唯一の情報ウィンドウは次のように(一度に表示されているのでGoogle Maps API v2 Developer Guideに記載されています)、情報ウィンドウが現在開いているマーカーがクリックされた場合、情報ウィンドウを非表示にするだけで済みます。

関連する問題