@Override public void onResume() { super.onResume(); MarkerOptions options; GoogleMap map = getMap(); map.setOnMarkerClickListener(this); map.setMyLocationEnabled(true); map.setOnInfoWindowClickListener(this); for (Mappable item : mList) { options = new MarkerOptions(); if (mDetailer != null) { mDetailer.fillMarker(item, options); } else { options .position(toLatLng(item)) .title( Double.toString(item.getMapLatitude()) + ", " + Double.toString(item.getMapLongitude())) .draggable(false); } // options.icon(BitmapDescriptorFactory.fromResource(R.drawable.map_pin_large)); map.addMarker(options); } if (mList.size() == 0) { throw new IllegalStateException("Has no point to view"); } else if (mList.size() == 1) { CameraUpdate update = CameraUpdateFactory.newLatLngZoom(toLatLng(mList.get(0)), 16); // MAGIC map.moveCamera(update); } else { map.setOnCameraChangeListener( new OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition arg0) { GoogleMap map = getMap(); LatLngBounds.Builder builder = LatLngBounds.builder(); for (Mappable point : mList) { builder.include(toLatLng(point)); } CameraUpdate update = CameraUpdateFactory.newLatLngBounds(builder.build(), 20); map.moveCamera(update); map.setOnCameraChangeListener(null); } }); } }
@Override public void onInfoWindowClick(Marker marker) { if (mDetailer != null) { for (Mappable point : mList) { LatLng ll = marker.getPosition(); Location loc1 = new Location(""); loc1.setLatitude(ll.latitude); loc1.setLongitude(ll.longitude); Location loc2 = new Location(""); loc2.setLatitude(point.getMapLatitude()); loc2.setLongitude(point.getMapLongitude()); if (loc2.distanceTo(loc1) < 10) { // EPSILON mDetailer.getDetail(point); return; } } } else { // Log.i("ListMapFragment", "mDetailer is null"); } }