在谷歌地图上我为不同的目的放置不同颜色的标记,在这里我想要onMarkerclick()的每个标记的不同功能(例如:所有绿色标记).如何为此创建条件.我的代码创建一个集合标记 @Overridepublic vo
@Override public void onMapLongClick(LatLng touchlocation) { // TODO Auto-generated method stub googleMap.addMarker(new MarkerOptions() .position(touchlocation) .title("Event") .icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); }
这里是另一种类型的标记
// adding marker user_marker = googleMap.addMarker(new MarkerOptions() .position(USER_LOCATION) .title("User") .snippet("User registered Location:" + loc) .icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_ROSE)));
对于附近的地方,我正在使用其他类型的标记
我在这里如何实现onMarkerClick()
@Override public boolean onMarkerClick(Marker marker) { // TODO Auto-generated method stub // googleMap.clear(); Toast.makeText(getApplicationContext(), "USER MARKER", Toast.LENGTH_LONG).show(); showDialog(DIALOG_LOGIN); return true; }
在这里,我希望每种类型的标记都有不同的功能,如何为它写一个条件.帮助我.
有几种方法可以做到这一点.如果您的所有标记都有值,您可以区分(例如标题),您可以这样做:
String title = marker.getTitle(); if ("User".equals(title)) { // show dialog } else if ("Event".equals(title)) { // do thing for events } else { // do thing for nearby places }
可以使用代码片段,但是如果您不想显示“USER”,“EVENT”或“NEARBY_PLACE”常量等片段,则必须注意创建信息窗口.
更通用的方法是将所有标记存储在集合中(如果要为每个标记分配额外的值,则存储地图):
private Set<Marker> events; private Set<Marker> nearbyPlaces;
然后检查点击标记是否属于以下集合之一:
if (user_marker.equals(marker)) { // show dialog } else if (events.contains(marker)) { // do thing for events } else if (nearbyPlaces.contains(marker)) { // do thing for nearby places } else { // something is wrong, better call police (assuming there are only 3 kinds of markers) }
最后但并非最不重要的是,您可以使用Android Maps Extensions删除丑陋的if语句.
为每个Marker类型创建一个OnMarkerClickListener,例如:
private OnMarkerClickListener userMarkerClickListener = new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // show dialog return true; } }; private OnMarkerClickListener eventMarkerClickListener = new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // do thing for events return false; } };
创建给定类型的标记时,指定单击侦听器:
user_marker.setData(userMarkerClickListener);
在您的全局OnMarkerClickListener中,添加到GoogleMap对象调用:
@Override public boolean onMarkerClick(Marker marker) { OnMarkerClickListener listener = (OnMarkerClickListener) marker.getData(); return listener.onMarkerClick(marker); }
如果你只有3种标记,我会选择第二种选择,因为它简单而强大.如果将来有超过5个或可能更改,使用第三个选项创建的面向对象代码将更容易维护恕我直言.