我正在尝试创建我的Info窗口的自定义视图,我已为其创建了一个布局文件。 但是我的数据(Lattitude和Longitude)的形式是一个ArrayList。
for (int i = 0; i < list.size(); i++) {
Log.e(getClass().getName(), list.get(i).getFirstName());
double x = list.get(i).getLocationLatLon().getLat();
double y = list.get(i).getLocationLatLon().getLon();
if (x > 90 || x < -90 || y < -180 || y > 180) {
Log.e(getClass().getName(),
"out of range " + Double.toString(x) + " "
+ Double.toString(y));
lng2 = new LatLng(lat, lng);
} else {
Log.e(getClass().getName(),
"In range " + Double.toString(x) + " "
+ Double.toString(y));
lng2 = new LatLng(x, y);
}
InfoClass infoClass= new InfoClass();
infoClass.setName(list.get(i).getFirstName()+" "+list.get(i).getLastName());
infoClass.setCharge(list.get(i).getCharge());
infoClass.setAvailableTime(list.get(i).getTimeAvailable());
infoClass.setServiceCategory(list.get(i).getCategoryName());
infoClass.setServiceName(list.get(i).getServiceName());
finalist.add(infoClass);
theMap.addMarker(new MarkerOptions()
.title(list.get(i).getServiceName())
.position(lng2)
.icon(BitmapDescriptorFactory
.fromResource(entertainment))
.snippet(list.get(i).getFirstName() + " "+ list.get(i).getLastName()) );
theMap.setOnInfoWindowClickListener(this);
}
我根据列表中的纬度和经度设置我的标记,并将所需信息添加到InfoClass类的ArrayList中。 现在,当我设置setInfoWindowAdapter并将finalist传递给我的InfoWindowAdapter实现时。
theMap.setInfoWindowAdapter(new InfoWindow(this, finalist));
我的InfoWindow类
public class InfoWindow implements InfoWindowAdapter {
private final View myContentsView;
private LayoutInflater mInflator;
ArrayList<InfoClass> list;
public InfoWindow(Context context, ArrayList<InfoClass> list) {
//Context context = new MainActivity().getApplicationContext();
Context context2= context;
mInflator = LayoutInflater.from(context2);
this.list= list;
myContentsView = mInflator.inflate(R.layout.info_view, null);
}
@Override
public View getInfoWindow(Marker marker) {
return myContentsView;
}
@Override
public View getInfoContents(Marker arg0) {
return null;
}
}
现在,在getInfoWindow方法中,如何获取特定标记的信息,因为每个标记需要根据其位置显示单独的信息。
答案 0 :(得分:0)
试试这个,
WindowLayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_lat"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_lng"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
public class MainActivity extends FragmentActivity {
GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = mapFragment.getMap();
// Setting a custom info window adapter for the google map
googleMap.setInfoWindowAdapter(new InfoWindowAdapter() {
// Use default InfoWindow frame
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.windowlayout, null);
// Getting the position from the marker
LatLng latLng = arg0.getPosition();
// Getting reference to the TextView to set latitude
TextView tvLat = (TextView) v.findViewById(R.id.tv_lat);
// Getting reference to the TextView to set longitude
TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);
// Setting the latitude
tvLat.setText("Latitude:" + latLng.latitude);
// Setting the longitude
tvLng.setText("Longitude:"+ latLng.longitude);
// Returning the view containing InfoWindow contents
return v;
}
});
// Adding and showing marker while touching the GoogleMap
googleMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng arg0) {
// Clears any existing markers from the GoogleMap
googleMap.clear();
// Creating an instance of MarkerOptions to set position
MarkerOptions markerOptions = new MarkerOptions();
// Setting position on the MarkerOptions
markerOptions.position(arg0);
// Animating to the currently touched position
googleMap.animateCamera(CameraUpdateFactory.newLatLng(arg0));
// Adding marker on the GoogleMap
Marker marker = googleMap.addMarker(markerOptions);
// Showing InfoWindow on the GoogleMap
marker.showInfoWindow();
}
});
}
}
通过这种方式,您可以创建自定义布局并实现您想要的方式。
让我知道它是否对你有所帮助。