web-dev-qa-db-ja.com

Android用GoogleマップV2でマーカーのonClickイベントをトリガーするにはどうすればよいですか?

特定のマーカーのonClickイベントを手動で(マーカーを物理的にタップせずに)呼び出す方法はありますか?

12
mustafa

いいえ、ただし、onClickイベントをシミュレートできます。マーカーをクリックすると、次の2つのことが起こります。

  1. 対応するクリックされたマーカーの情報ウィンドウが表示されます。
  2. カメラがマーカーにパンします。

上記は、2行のコードで実現できます。

marker.showInfoWindow();
map.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()), 250, null);
10
iflp

これを試して 、

マップクラスからマーカークリックリスナーを実装します。

public class MapView extends FragmentActivity implements OnMarkerClickListener{}

次のようにonMarkerClickEventをオーバーライドします。

@Override
public boolean onMarkerClick(final Marker marker) {}
4
Heshan Sandeepa

答えはいいえだ。特定のマーカーのonClickを個別に設定することはできません。

ただし、Map.setOnMarkerClickListener(_)を使用すると、そのようなすべてのイベントのリスナーを設定できます。マーカーがクリックされるたびに呼び出されるリスナーでmarkerオブジェクトを取得できるはずです。何らかの識別を使用して、これが希望する特定のマーカーであるかどうかを確認し、それに応じて行動することができます。識別は、そのマーカーに固有のプロパティのいずれかである可能性があり、titleが明白な選択です。ただし、任意のプロパティを使用してマーカーをフィルタリングできます。

1
shujj

[〜#〜] no [〜#〜]、マーカークリックイベントを(コードから)直接トリガーすることはできません。

mMap.setOnMarkerClickListener(...);を使用するだけで、マーカーのクリックイベントを処理できます。


ただし、 WebView でマップを使用する場合は別の方法があるため、JavaScriptを使用してマーカークリックイベントをトリガーできます。

//In V2 version:
GEvent.trigger(markers[i], 'click');

//In V3 version:
google.maps.event.trigger(markers[i], 'click');
1
Rami

私はこれに偶然出くわし、答えに助けられませんでした。したがって、将来の読者のために-map.setOnMarkerClickListener(yourClickHandler)を追加する場合、それは非常に簡単です。

yourClickHandlerからロジックを抽象化し、すべてのマーカーへの参照を保持します...つまり.

_private val markers = arrayListOf<Marker>()
_

マップにマーカーを追加する場合は常に、マーカーをmarkers配列にも追加します。つまり何かのようなもの

_val marker = MarkerOptions().position(...).......
markers.add(map.addMarker(marker))
_

そして、yourClickHandlerは次のようになります

_val yourClickHandler = GoogleMap.OnMarkerClickListener {
    markerClickHandler(marker = it)
    return@OnMarkerClickListener false
}
_

これで、マップ上のマーカーを押すたびに、yourClickHandlermarkerClickHandler()を呼び出し、そこで行うことはすべて発生します。また、プログラムでマーカーを押したくない場合は、そのマーカーをmarkerClickHandlerに渡すだけです。

0
Algar

マーカーのクリックをシミュレートできます。 MarkerManagerクラスから拡張するMyMarkerManagerクラスを作成します。

このクラスには、イベントをシミュレートするために手動で呼び出すことができる関数onMarkerClick()があります。

詳細については、このリンクを参照してください。 https://github.com/googlemaps/Android-maps-utils/blob/master/library/src/com/google/maps/Android/MarkerManager.Java

0
Yuvi