所以我的应用程序要求我为某辆公共汽车创建一条路线。我已完成此操作并为标记创建了自定义信息窗口。现在,我被要求添加一个功能,我需要在地图上显示标记周围的POI(兴趣点)。我已成功创建了这个。但是,我想为这些POI标记设置不同的信息窗口。
这是我的第一个信息窗口:
public class InfoAdapter implements GoogleMap.InfoWindowAdapter {
LayoutInflater inflater = null;
private TextView textViewstopName;
private TextView arrivalTime;
public InfoAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
@Override
public View getInfoWindow(Marker marker) {
View v = inflater.inflate(R.layout.businfo_layout, null);
if (marker != null) {
textViewstopName = (TextView) v.findViewById(R.id.businfo);
textViewstopName.setText(marker.getTitle());
arrivalTime = (TextView) v.findViewById(R.id.arrivalinfo);
arrivalTime.setText(marker.getSnippet());
}
return (v);
}
@Override
public View getInfoContents(Marker marker) {
return (null);
}
}
这是我的第二个(我现在要为POI默认一个):
public class PlacesAdapter implements GoogleMap.InfoWindowAdapter{
LayoutInflater inflater = null;
public PlacesAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
@Override
public View getInfoWindow(Marker marker) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
return null;
}
}
这是我给第一个打电话的地方:
private void SetupStopMarkers(){
map.setInfoWindowAdapter(new InfoAdapter(getLayoutInflater()));
addMarkersToMap(markerPoints);
}
这是我打电话给第二个的地方:
else{
map.setInfoWindowAdapter(new PlacesAdapter(getLayoutInflater()));
...
}
我的info_layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1"
android:background="@drawable/businfo_dialog">
<ImageView
android:id="@+id/busicon"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/busstop_icon"/>
<ImageView
android:id="@+id/clockicon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_below="@+id/busicon"
android:layout_alignParentLeft="true"
android:paddingLeft="5dp"
android:src="@drawable/clock"
android:paddingBottom="10dp"/>
<TextView
android:id="@+id/businfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:drawablePadding="10dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/busicon"
android:layout_toEndOf="@+id/busicon"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/arrivalinfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:drawablePadding="10dp"
android:layout_centerVertical="true"
android:layout_below="@+id/businfo"
android:layout_toRightOf="@+id/clockicon"
android:layout_toEndOf="@+id/clockicon"
android:paddingRight="10dp"
android:paddingTop="5dp"/>
<TextView
android:id="@+id/placesinfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/arrivalinfo"
android:paddingTop="5dp"
android:paddingBottom="35dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="#0099cc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="@string/more_info"/>
<TextView
android:id="@+id/eta_i"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/arrivalinfo"
android:layout_toEndOf="@+id/arrivalinfo"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:layout_alignTop="@+id/arrivalinfo"
android:text="ETA:"
android:textStyle="bold"
android:textColor="#FFFFFFFF"/>
</RelativeLayout>
但是在调用第二个信息窗口后,地图中的每个标记都会更改为第二个信息窗口。有没有办法做到这一点?任何帮助表示赞赏。
答案 0 :(得分:2)
知道了。因此,为了获得多个Info窗口,我必须获得与标记相对应的标记ID。所以我创建了一个ArrayList,它接收了&#34; id&#34;标记。
ArrayList<String> markerPlaces = new ArrayList<>();
然后我在将标记添加到地图时填充它:
Marker marker = map.addMarker(new MarkerOptions().position(position)
.title(venuesfound.get(i).getName())
.snippet("\nOpen: " + venuesfound.get(i).getOpenNow()
+ "\n(" + venuesfound.get(i).getCategory() + ")")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.measle_blue)));
markerPlaces.add(marker.getId());
然后在InfoAdapter上,我添加了一个条件,如果标记id在我创建的ArrayList中,那么就放入另一个inflater。
public class InfoAdapter implements GoogleMap.InfoWindowAdapter {
LayoutInflater inflater = null;
private TextView textViewstopName;
private TextView arrivalTime;
public InfoAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
@Override
public View getInfoWindow(Marker marker) {
if (marker != null) {
if(markerPlaces.containsKey(marker.getId())) {
... //Add new inflater here.
} //checks if the marker is part of the Position marker or POI marker.
else{
View v = inflater.inflate(R.layout.businfo_layout, null);
textViewstopName = (TextView) v.findViewById(R.id.businfo);
textViewstopName.setText(marker.getTitle());
arrivalTime = (TextView) v.findViewById(R.id.arrivalinfo);
arrivalTime.setText(marker.getSnippet());
return (v);
}
}
return null;
}
@Override
public View getInfoContents(Marker marker) {
return (null);
}
}
谢谢大家的帮助!这当然让我思考!