Я хочу, чтобы иметь возможность щелкнуть синюю точку (мое местоположение), которая отображается на карте. Есть ли способ получить обратный вызов из этого клика?Карты V2 myLocation синяя точка callback
Спасибо, Мартейн
Я хочу, чтобы иметь возможность щелкнуть синюю точку (мое местоположение), которая отображается на карте. Есть ли способ получить обратный вызов из этого клика?Карты V2 myLocation синяя точка callback
Спасибо, Мартейн
Одним из возможных обходной путь может быть рисую Marker
(с подобным значком) на верхней части My Location точки, так что вы можете получить соответствующий onMarkerClick()
обратного вызова. Это также потребовало бы удаления маркера и добавления его в новое место каждый раз, когда есть событие обновления местоположения, которое вы можете прослушать, выполнив OnMyLocationChangeListener
.
EDIT: интерфейс OnMyLocationChangeListener
теперь не рекомендуется, следует использовать вместо нового LocationClient
и связанного с ним LocationListener
.
Так соответствующий код может выглядеть примерно так (я на самом деле не проверял это):
public class DemoMapFragment extends SupportMapFragment implements OnMyLocationChangeListener, OnMarkerClickListener {
// Note that 'mMap' may be null if the Google Play services APK is not available.
private GoogleMap mMap;
private Marker myLocationMarker;
private static BitmapDescriptor markerIconBitmapDescriptor;
/* ... */
@Override
public void onResume() {
super.onResume();
setUpMapIfNeeded(); // Get a reference to the map
mMap.setMyLocationEnabled(true); // Enable the my-location layer
mMap.setOnMyLocationChangeListener(this);
mMap.setOnMarkerClickListener(this);
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
mMap = getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
// The Map is verified. It is now safe to manipulate the map:
// Load custom marker icon
markerIconBitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.my_location_dot_icon);
// When the map is first loaded we need to add our marker on top of My Location dot
myLocationMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(mMap.getMyLocation().getLatitude(),mMap.getMyLocation().getLongitude()))
.icon(markerIconBitmapDescriptor));
// Set default zoom
mMap.moveCamera(CameraUpdateFactory.zoomTo(15f));
}
}
}
@Override
public void onMyLocationChange(Location location) {
// Remove the old marker object
myLocationMarker.remove();
// Add a new marker object at the new (My Location dot) location
myLocationMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(location().getLatitude(),location().getLongitude()))
.icon(markerIconBitmapDescriptor));
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(myLocationMarker)) {
/* My Location dot callback ... */
}
}
}
Благодарим за Ваш ответ. Думаю, это хорошая работа, и я ее реализовал. Я просто не понимаю, почему api не предоставляет этого, кто не хочет нажимать myLocation ?! Также я понимаю, что V1 api предоставил его (я никогда не использовал карты V1, хотя). – Tinus81
@ Tinus81 Рад, что это работает для вас. Я предполагаю, что эта функция будет добавлена в будущем [release] (https://developers.google.com/maps/documentation/android/releases). – Nevermore
Кстати, я сделал для этого маркер, который полностью прозрачен. Пользователь не заметит разницы с приложением «Карты»! – Tinus81