如何为android中不同类型的标记指定onMarkerclick()
在谷歌地图上,我为不同的目的放置了不同颜色的标记,这里我希望每个标记(例如:所有绿色标记)的onMarkerclick()具有不同的功能。如何为此设置条件。下面是我创建一组标记的代码如何为android中不同类型的标记指定onMarkerclick(),android,google-maps-android-api-2,Android,Google Maps Android Api 2,在谷歌地图上,我为不同的目的放置了不同颜色的标记,这里我希望每个标记(例如:所有绿色标记)的onMarkerclick()具有不同的功能。如何为此设置条件。下面是我创建一组标记的代码 @Override public void onMapLongClick(LatLng touchlocation) { // TODO Auto-generated method stub googleMap.addMarker(new MarkerOptions() .p
@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)));
对于附近的地方,我使用另一种类型的标记
// 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()的
在这里,我想为每种类型的标记提供不同的功能,以及如何为此编写条件。请帮助我。有几种方法可以做到这一点 如果您所有的
标记
都有一个可以区分的值(例如标题),您可以执行以下操作:
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
}
Snippet可用于此目的,但如果不想显示类似于“用户”
、“事件”
或“附近位置”
常量的代码段,则必须注意创建信息窗口视图
一种更通用的方法是将所有标记
存储在集合
s中(或者映射
s,如果您想为每个标记
分配附加值):
最后但并非最不重要的一点是,您可以使用删除丑陋的if
语句
为每个标记
类型创建一个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种标记
s,我会选择第二种,因为它简单而健壮。如果超过5个或将来可能更改,使用第三个选项创建的面向对象代码将更容易维护IMHO。您也可以像
String Title = marker.getTitle();
Log.e("I am in onMarkerClick" , Title);
if(Title.equals("Pick Me")){
Toast.makeText(getBaseContext(),filterAddress,Toast.LENGTH_LONG).show();
Log.e("I am in onMarkerClick", Title);
}else if (Title.equals("Drop ME")){
Log.e("I am in onMarkerClick" , Title);
Toast.makeText(getBaseContext(),DropoffAdress,Toast.LENGTH_LONG).show();
}
//标题是标记选项。标题(“您指定的标题”) 我为每个标记创建一个侦听器。这样,我将有一个更有组织性和可维护性的代码
private GoogleMap.OnMarkerClickListener portoAlegreMarkerClickListener = new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(getApplicationContext(), "Welcome to Porto Alegre", Toast.LENGTH_SHORT).show();
return false;
}
};
然后我创建了标记,在下面的指令中,我将私有侦听器作为标记传递。这起作用了。如果有人知道如何以更好的方式通过听力,请与我们分享
@Override
public void onMapReady(GoogleMap googleMap) {
markerPortoAlegre = googleMap.addMarker(new MarkerOptions()
.position(portoAlegre)
.title("Porto Alegre"));
markerPortoAlegre.setTag(portoAlegreMarkerClickListener);
}
最后,我使用getTag()
创建一个实例来获取全局侦听器。我认为这种方法是一种分别模块化标记侦听的方法,不同于我们使用googleMap.setonmarkerclicklister(this)
和一个覆盖所有标记的markerclick方法
@Override
public boolean onMarkerClick(Marker marker) {
GoogleMap.OnMarkerClickListener listener = (GoogleMap.OnMarkerClickListener) marker.getTag();
//I used listener!=null to avoid an exception
return listener != null && listener.onMarkerClick(marker);
}
这样,您就必须修改onMapReady,并根据需要多次添加全局侦听器。我写的最后一个方法将始终保持不变。如何创建标记?我只能通过MarkerOptions添加标记,例如googleMaps.addMarker(新的MarkerOptions(…)
Scratch。addMarker返回标记,因此set选项工作良好。
@Override
public void onMapReady(GoogleMap googleMap) {
markerPortoAlegre = googleMap.addMarker(new MarkerOptions()
.position(portoAlegre)
.title("Porto Alegre"));
markerPortoAlegre.setTag(portoAlegreMarkerClickListener);
}
@Override
public boolean onMarkerClick(Marker marker) {
GoogleMap.OnMarkerClickListener listener = (GoogleMap.OnMarkerClickListener) marker.getTag();
//I used listener!=null to avoid an exception
return listener != null && listener.onMarkerClick(marker);
}